我在 selenium 和 scrapy 对象之间进行通信时遇到问题。
我正在使用 selenium 登录某个站点,一旦我得到该响应,我想使用刮削的函数来解析和处理。请有人帮助我编写中间件,以便每个请求都应该通过 selenium web 驱动程序,并且响应应该传递给scrapy。
谢谢!
这非常简单,创建一个带有 webdriver 的中间件并用于process_request拦截请求,丢弃它并使用它必须将它传递给您的 selenium webdriver 的 url:
from scrapy.http import HtmlResponse
from selenium import webdriver
class DownloaderMiddleware(object):
def __init__(self):
self.driver = webdriver.Chrome() # your chosen driver
def process_request(self, request, spider):
# only process tagged request or delete this if you want all
if not request.meta.get('selenium'):
return
self.driver.get(request.url)
body = self.driver.page_source
response = HtmlResponse(url=self.driver.current_url, body=body)
return response
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是您必须摆脱蜘蛛中的并发性,因为 selenium webdrive 一次只能处理一个 url。请参阅设置文档页面。
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |