在使用Scrapy定期处理硒所需的页面 之前, 请使用Downloader
Middleware捕获硒所需的页面: __
下载器中间件是一个挂钩Scrapy的请求/响应处理的框架。这是一个轻量级的低级系统,用于全局更改Scrapy的请求和响应。
这是一个使用PhantomJS的非常基本的示例:
from scrapy.http import HtmlResponsefrom selenium import webdriverclass JSMiddleware(object): def process_request(self, request, spider): driver = webdriver.PhantomJS() driver.get(request.url) body = driver.page_source return HtmlResponse(driver.current_url, body=body, encoding='utf-8', request=request)
一旦您返回该代码
HtmlResponse(或者
TextResponse您真正想要的是),Scrapy将停止处理下载程序,并使用Spider的
parse方法:
如果它返回一个Response对象,Scrapy将不会费心调用任何其他process_request()或process_exception()方法,或适当的下载函数。它将返回该响应。总是在每个响应上调用已安装中间件的process_response()方法。
在这种情况下,
parse除了页面上的JS已被执行之外,您可以继续像平常使用HTML一样继续使用Spider的方法。
提示:由于Downloader
Middleware的process_request
方法接受Spider作为参数,因此您可以在Spider中添加一个条件来检查是否需要处理JS,这将使您能够以完全相同的方式处理JS和非JS页面蜘蛛类。



