Ⅸ.Re:Scrapy中间件
MiddlewareManager
Scrapy 中
SpiderMiddlewareManager
、DownloaderMiddlewareManager
、ExtensionManager
和ItemPipelineManager
继承了相同的基类MiddlewareManager
SpiderMiddlewareManager
:可以理解成Scrapy针对Spider处理机制的钩子框架,可以自定义处理发送给Spider的响应、Spider产生的 Request 及 Item
DownloaderMiddlewareManager
:可以理解成Scrapy针对请求/响应的钩子框架,可以增加对请求/响应前后的处理
ExtensionManager
:扩展(只是普通的类)。提供一些辅助功能和状态统计
ItemPipelineManager
:持久化数据(需要自行实现)
scrapy/middleware.py#MiddlewareManager
SpiderMiddlewareManager
默认中间件
主要方法
- process_spider_input(response, spider)
- 返回
None
会继续执行其他中间件 - 引发一个异常(raise an exception)不会往下处理,会根据
errback
指定方法或进入process_spider_exception处理
- 返回
- process_spider_output(response, result, spider)
- 返回
Request
- 返回
Item
- 返回
- process_spider_exception(response, exception, spider)
- 返回
None
会继续给之后的 process_spider_exception 处理,直到 Engine 那里记录并丢弃 - 返回
Request
- 返回
Item
- 返回
- process_start_requests(start_requests, spider)
- 返回一个可迭代的 Request 对象
DownloaderMiddlewareManager
默认中间件
主要方法
- process_request(request, spider)
- 返回
None
会执行其他中间件,直到被 Downloader 执行 - 返回
Request
会立即加入到下载队列中 - 返回
Respense
不会执行其他中间件,直接返回该响应 - 引发一个异常(IgnoreRequest) 会根据
errback
指定方法或进入process_exception处理。如果没有代码处理异常,它将会被忽略,且不被记录
- 返回
- process_response(request, response, spider)
- 返回
Respense
会执行其他中间件process_response的处理 - 引发一个异常(IgnoreRequest) 会根据
errback
指定方法或进入process_exception处理。如果没有代码处理异常,它将会被忽略,且不被记录
- 返回
- process_exception(request, exception, spider)
- 返回
None
会执行其他中间件继续处理异常 - 返回
Request
会立即加入到下载队列中 - 返回
Respense
不会执行其他中间件
- 返回
ExtensionManager
默认中间件
主要方法
普通的类,如果from_crawler
方法引发 NotConfigured
异常,扩展将被禁用。否则,将启用扩展。
通常,扩展连接到 Signals
并执行由它们触发的任务。
详见 👉 信号量 https://docs.scrapy.org/en/latest/topics/signals.html#topics-signals
ItemPipelineManager
默认中间件
需要自己实现
主要方法
- process_item(self, item, spider)
- 返回
Item
- 返回
Deferred
- 引发一个异常(
DropItem
)
- 返回
Ⅸ.Re:Scrapy中间件
https://元气码农少女酱.我爱你/b2f48fd84c6c/