爬虫Scrapy框架之学习使用(二):DownloaderMiddleWares

DownloaderMiddleWares主要有三个方法:

def process_request(self, request, spider):#处理请求
def process_response(self, request, response, spider):#处理响应
def process_exception(self, request, exception, spider):#处理异常

中间件的流程和Django的中间件的流程一样,都是一层层进行处理,但是有点不一样的地方:如果请求或者异常被中途拦截了,那么会从响应的时的第一层开始回传,也就是请求的最后一层,这个地方需要注意下。

爬虫Scrapy框架之学习使用(二):DownloaderMiddleWares

process_request:

这里面我们可以对请求进行再次处理,比如添加请求头、添加代理等。
返回值:

None,继续执行后续中间间;
response对象,停止执行process_request,开始执行process_response;
request对象,停止中间件的执行,直接把request交给调度器
raise IgnoreRequest抛异常,停止process_request执行,proccess_exception被触发执行。

process_response:

返回值:

response对象,交给其他中间件process_response执行;
request对象,会直接返回交给调度器;
raise IgnoreRequest异常,触发执行Request.errback

process_exception:

返回值

None,交给后续中间件处理异常;
response对象,触发process_response执行,停止process_exception;
request对象,会交给调度器重新发起请求。