Scrapy爬虫之下载中间件的处理流程

在这里插入图片描述
scrapy的下载中间件都有三个函数:

函数返回对象
process_request1.None
2.Response
3.Request
4.Raise IgnoreRequest
process_responseA.Response
B.Request
C.Raise IgnoreRequest
process_exceptioni.None
ii.Response
iii.Request

process_request(self, request, spider)

以图中的下载中间件2为例说明:

  1. 返回None:将请求传给后面的中间件的process_request函数继续处理
  2. 返回Response:请求不再传给后面的中间件,而是直接进入最后一个中间件的process_response函数里来处理Response对象
  3. 返回Request:重新开始处理请求,即进入第一个中间件的process_request函数
  4. 抛出异常的处理流程:如果异常链中有process_exception则按顺序调用,没有或者链中的process_exception函数调完了,则调用Request中定义的errback方法。两者都没有定义,则异常将被忽略。
    1. 进入process_exception异常处理链,从最后一个中间件开始
    2. Request.errback
    3. 异常被忽略

process_response(self, request, response,spider)

以图中的下载中间件3为例说明:

  1. 返回Response:将响应交由下一个中间件的process_response函数继续处理
  2. 返回Request:请求将重新开始,即进入第一个中间件的process_request函数
  3. 抛出异常的处理流程:
    1. Request.errback
    2. 异常将被忽略

process_exception(self, request, exception, spider)

以图中的下载中间件3为例说明:

  1. 返回None:将异常交给下一个中间件的process_exception函数处理
  2. 返回Response: 将该响应交由最后一个中间件的process_response函数处理
  3. 返回Request:重新开始处理请求,即进入第一个中间件的process_request函数
  4. 抛出异常的处理流程:
    1. Request.errback
    2. 异常将被忽略

注意:抛出scrapy中定义的异常可能与自定义异常有所区别,比如:IgnoreRequest异常不会记录异常统计次数;在errback中抛出CloseSpider将关闭爬虫程序。

备注:

  1. 中间件需要安装才能处理,请记得安装配置中间件的优先级。
  2. 中间件的优先级:数字越小越靠近引擎,数字越大越靠近下载器。请求最先从引擎处开始传递,逐次经过优先级数字越来越大的中间件;相反,下载器返回响应时,则逐次经过优先级数字越来越小的中间件处理。因此,以上图为例:不要认为一个请求最先是中间件1处理的,那么响应也会最先由中间件1来处理,这是错误的。请求最先由优先级数字最小的中间件来处理,而响应最先由优先级数字最大的中间件处理
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值