美文网首页
scrapy反扒异常状态码处理

scrapy反扒异常状态码处理

作者: 是东东 | 来源:发表于2019-05-20 15:18 被阅读0次

1.当爬取页面状态码是异常状态码,但response页面是正常的时候
2.有些网站第一次请求时会出现异常状态码,再发请求返回的响应就是正常的状态码

一、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里写入一个

# 系统会自动调用你定义的这个函数(要保证settings调用这个middleware类),判断状态码是否是异常状态码,如果是会重新发送请求。
def process_response(self, request, response, spider):
    if response.status == 异常状态码:
        return request
    else:
        return response

相关文章

  • scrapy反扒异常状态码处理

    1.当爬取页面状态码是异常状态码,但response页面是正常的时候2.有些网站第一次请求时会出现异常状态码,再发...

  • scrapy异常状态码处理

    在setting.py中加入

  • 异常捕获

    自动抛出异常:abort(状态码) 捕获异常处理:errorhandler(状态码),定义的函数中要包含一个参数,...

  • SpringBoot 统一异常处理

    SpringBoot 统一异常处理 异常和响应码 因为用RESTful设计的接口, 应该用状态码反映请求的错误, ...

  • Mac下scrapy安装异常处理记录

    1.sudo pip install Scrapy --------提示异常 原因:scrapy安装需要处理six...

  • scrapy中的Exceptions和DOWNLOADMIDDL

    scrapy提供的异常以及说明 DropItem该异常由item pipeline抛出,用于停止处理item Cl...

  • iOS异常浅析

    异常简介 处理器和系统内核中有设计标识不同事件的状态码,这些状态被编码为不同的位和信号。每次处理器和内核检测到状态...

  • iOS异常浅析

    异常简介 处理器和系统内核中有设计标识不同事件的状态码,这些状态被编码为不同的位和信号。每次处理器和内核检测到状态...

  • Spring MVC的异常处理(译)

    原文链接 使用Http状态码 通常,处理Web请求时引发的任何未处理的异常都会导致服务器返回HTTP 500响应。...

  • 常见异常状态码

    一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用 详细分解:...

网友评论

      本文标题:scrapy反扒异常状态码处理

      本文链接:https://www.haomeiwen.com/subject/tcukzqtx.html