1. 下载中间件的方法
- process_request(request,spider): 所有请求都会调用此方法
- process_response(request, response, spider): 这里的参数比上面的多了response,肯定是用来处理response的
- process_exception(request, exception, spider):处理异常
- from_crawler(cls, crawler):从settings.py获取配置
2. 蜘蛛中间件的方法
- process_spider_input(response, spider):所有请求都会调用这个方法
- process_spider_output(response, result, spider):spider解析完response之后调用该方法,result就是解析的结果(是一个可迭代对象),其中可能是items也可能是request对象
- process_spider_exception(response, exception, spider):处理异常
- process_start_requests(start_requests, spider):同process_spider_output,不过只处理spider中start_requests方法返回的结果
- from_crawler(cls, crawler):从settings.py获取配置
3. 区别
- 下载中间件是连通引擎和下载器的,所以如果修改请求只会影响下载器返回的结果,如果修改响应会影响 spider 处理;
- 而 spider 中间件是连通引擎和 spider 的,如果修改请求则会影响整个 scrapy 的请求,因为scrapy的所有请求都来自于 spider,当然包括调度器和下载器,如果修改响应,则只会影响蜘蛛的解析,因为响应是由引擎传递给蜘蛛的。
4. 使用
- spider 中间件:
-- 一般用于操作 spider 返回的request,比如记录深度、丢弃非200状态码响应、丢弃非指定域名请求等;
-- 蜘蛛中间件一般不需要自己编写,使用内置的几个也足够了;
- 下载中间件:
-- 下载中间件用于操作向互联网发起请求的request和返回的response,比如修改请求头、修改响应、管理cookies、丢弃非200状态码响应、丢弃非指定域名请求等;