Scrapy处理异常状态码

一、Scrapy框架跳过异常状态码

       当爬取页面状态码是异常状态码,但response是正常的时候,正常情况Scrapy框架会判断状态码,如果不是正常状态码会停止后续操作。

.../lib/python3.5/site-packages/scrapy/spidermiddlewares/httperror.py    
    def process_spider_input(self, response, spider):
        if 200 <= response.status < 300:  # common case
            return
        meta = response.meta
        if 'handle_httpstatus_all' in meta:
            return
        if 'handle_httpstatus_list' in meta:
            allowed_statuses = meta['handle_httpstatus_list']
        elif self.handle_httpstatus_all:
            return
        else:
            allowed_statuses = getattr(spider, 'handle_httpstatus_list', self.handle_httpstatus_list)
        if response.status in allowed_statuses:
            return
        raise HttpError(response, 'Ignoring non-200 response')

       通过上面代码,可以看出,如果在请求一些页面状态码异常,但response是正常的时候可以在请求的时候(Request)加一个参数就可以让异常状态码进行后续的操作。

Request(url=url, callback=函数名, meta={"handle_httpstatus_all": True}

       当然也可以采用判断特定状态码进行后续操作,定义一个名handle_httpstatus_list的列表里面存入要跳过的异常状态码; 也可以在settings.py文件中加,这样所有爬虫就都支持了,具体看自我需求。

 

二、Scrapy框架异常状态码重新发送请求

       有些网站第一次请求时会出现异常状态码,再发请求返回的响应就是正常的状态码,遇到这种情况可以在自己的下载中间件系统默认middleware.py里写入一个

def process_response(self, request, response, spider):
    if response.status == 异常状态码:
        return request
    else:
        return response

        系统会自动调用你定义的这个函数(要保证settings调用这个middleware类),判断状态码是否是异常状态码,如果是会重新发送请求。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值