scrapy爬虫retry使用

最近使用scrapy爬虫的过程中遇到response 403的问题,由于服务器拒绝,需要重新retry。查了很久,翻看文档终于明白scrapy自带的retry如何使用。

配置setting.py,在网上可以随意查找到,设置启动retry机制,:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
} 

RETRY_ENABLE=True
RETRY_TIMES=100
RETRY_HTTP_CODECS = [403]
HTTPERROR_ALLOWED_CODES = [403] #当遇到403的时候爬虫脚本不退出

设置完之后重新跑脚本发现好像没有任何反应,查找文档发现,需要返回新的request

在errback_parse中添加,errback_parse,是异常函数callback,当爬虫遇到异常时进入,细节可以查看文档:

def start_requests(self):
        for u in self.start_urls:
            yield scrapy.Request(u, callback=self.parse,
                                    errback=self.errback_parse,
                                    dont_filter=True)

def errback_parse(self, fail):
   
        new_request = Request(url=fail.request.url, method="GET", cookies="")
        new_request_or_none = get_retry_request(
            new_request,
            spider=self,
            reason='retry',
        )
        return new_request_or_none

重新启动,当遇到403的时候就会有反应了:

但是直接重新retry服务器还是会拒绝,然后尝试产生新的request,但是url不变,重新提取数据。成功。虽然没有弄清楚最终的原因,测试是新的request和启动的request不一样。

def errback_parse(self, fail):
        #new_request = Request(url="http://d.10jqka.com.cn/v6/line/hs_001896/02/all.js", method="GET", cookies="")
        new_request = Request(url=fail.request.url, method="GET", cookies="")
        new_request_or_none = get_retry_request(
            new_request,
            spider=self,
            reason='retry',
        )
        return new_request_or_none

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值