中间件这部分算是一个高阶的Scrapy内容,即便不了解这部分也可以使用Scrapy,但是一些特殊情况使用中间件就比较方便处理了,比如修改请求和响应等。
通过之前的工作原理图中,我们了解到Scrapy中有两个中间件,分别是下载器中间件和爬虫中间件,本节将一一讲解如何激活、编写自己的中间件和如何使用内置中间件。
下载器中间件Downloader Middlewares
激活下载器中间件
在 Scrapy 项目的settings.py
文件中进行配置,从而激活下载器中间件。具体操作是在DOWNLOADER_MIDDLEWARES
字典中添加或修改相应的中间件配置。例如,如果要激活自定义的下载器中间件MyCustomDownloaderMiddleware
,假设其路径为myproject.middlewares.MyCustomDownloaderMiddleware
,可以这样配置:
DOWNLOADER\_MIDDLEWARES = {"myproject.middlewares.MyCustomDownloaderMiddleware": 543,
}
其中,数字543
代表中间件的执行顺序,数值越低优先级越高。
编写自己的下载器中间件
编写自定义下载器中间件,需要创建一个 Python 类,并重写一些特定的方法。可以重写方法包括process_request
、process_response
、process_exception
和from_crawler
方法。
process_request(self, request, spider)
- 当每个
request
通过下载中间件时,该方法被调用 - 可以返回
None
,表示继续处理这个请求 - 可以返回一个
scrapy.http.Response
,则中间件会返回这个响应对象并跳过下载过程,直接把响应传递给爬虫; - 可以返回一个
scrapy.http.Request
,那么会停止当前请求及后面的中间件,新请求会被重新调度和下载; - 或者抛出
scrapy.exceptions.IgnoreRequest
异常,请求会被丢弃,触发spider
的request_dropped
信号 </
- 当每个