downloader middleware(下载中间件)的认识
下载中间件相对于
spider middleware显得作用更大些,在实际中使用也更加频繁,比如动态设置代理ip,请求头等
一、关于downloader middleware的认识
- 1、继续参考第八章第二节的图中分析,下载中间件是介于
spider的request/respone处理的钩子框架,是用于全局修改scrapy的request和respone,更好的帮助我们定制爬虫。 - 2、使用过程中同样需要在
settings.py中的DOWNLOADER_MIDDLEWARES注册激活 3、关于
scrapy中内置的downloader middleware(直接看源码,有点多就不直接引入)
二、下载中间件中几个重要方法
1、下载器中间件主要核心的方法有(只要实现一个或者多个的类就可以叫下载中间件)
process_request(self, request, spider)process_response(self, request, respone, spider)process_exception(self, request, exception, spider)from_crawler(cls, crawler)(本来不属于这边的,只是我们需要从settings.py中获取配置信息)
2、
process_request(self, request, spider)方法参数:
request:发送请求的request对象spider:发送请求的spider对象
返回值:
Node:如果返回的是None,scrapy将执行其他的下载中间件继续处理request,Response:如果返回是Response,scrapy将不会调用任何其他的process_request方法,直接返回respone,且会在已经激活的中间件中的process_response中继续调用Request:如果返回是Request不再使用之前request对象去下载数据,而是根据现在返回的request对象返回request对象返回数据- 如果是抛出异常就会执行
process_exception方法
3、
process_response(self, request, respone, spider)方法 参数:request:request对象respone:被处理的respone对象spider:spider对象
返回值
- 返回
response对象:会将这个新的respone对象传给其它的中间件,最终传给爬虫 - 返回
request对象,下载器链(对个下载器串行)就会被切断,返回的request会重新被下载器调度下载 - 如果是抛出异常就会执行
process_exception方法
4、
process_exception(self, request, exception, spider)方法 参数:request:产生异常的request对象exception: 异常spider:spider对象
返回值:
None:scrapy将会继续执行别的下载中间件- 如果返回
Response对象时,那么已经激活的process_response方法会继续执行 - 如果返回
Request对象时,那么request将会重新调用下载