初识scrapy框架(七)------ 下载中间件内容补充(内置的函数介绍)
下载中间件常用的函数:
process_request(self, request, spider)
参数:
request:一个Request对象,需要处理的请求对象。
spider:此Request 所对应的spider。
1、当每个request请求通过下载中间件的时候,此方法被调用。
2、process_request()必须返回一下其中之一:None,Response对象,一个Request对象或者raise IgnoreRequest 。
3、如果返回的是None,则会调用其他的中间件方法去处理该request请求,知道合适的下载器处理函数被调用,该
request被执行,获得response 。
4、如果返回response对象,Scrapy不会调用其他的process_request()或process_exception()方法,或相应的下载函
数;将response对象返回给process_response()方法处理。
5、如果是Request对象,Scrapy 则停止调用process_request方法并重新调度返回的request。当新的request被执行
后,相应的中间件会根据下载的response被调用。
6、如果抛出一个异常IgnoreRequest,则会调用安装的process_exception()方法,如果没有任何一个方法处理
该异常,则requestd errback(Request.errback)方法会被调用。如果代码没有处理抛出的异常,则该异常被忽略且
不记录。
process_response(self, request, response, spider)
参数:
response:要处理的response对象。
request:response对应的request请求对象。
spider:response对应的spider。
1、当下载器完成http请求,传递响应给引擎的时候调用。
2、process_response()必须返回:Response对象,Request对象或者raise IgnoreRequest 。
3、如果返回一个Response,该response会被中间件的其他process_response()调用处理。
4、如果是一个Request对象,则中间件链停止,返回的request会被重新调度下载,处理类似于
process_request那样。
5、如果抛出IgnoreResquest异常,则调用request的errback(Request.errback)。如果没有代码处理抛出的
异常,则该异常被忽略且不记录。