下载器中间件是一个挂钩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页面spider。



