我遇到了selenium和scrapy对象之间的通信问题。
我正在使用selenium登录某个站点,一旦得到响应,我想使用scrape的工作人员进行解析和处理。请一些人帮我写中间件,以便每个请求都应该通过selenium web驱动程序,响应应该传递给scrapy。
谢谢!
答案 0 :(得分:4)
这非常简单,使用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
这样做的缺点是你必须摆脱蜘蛛的并发性,因为selenium webdrive一次只能处理一个url。为此,请参阅settings documentation page。