账号登陆失败 获取bdstoken失败_scrapy 重写download middleware 获取 超过最大重试次数 失败的请求...

868760a620915e8acd420716864cf9ad.png

72d4a0f1573d0c54c34b3410dba492d9.png

打开源码进入retry.py文件

我们可以看到两个方法 一个process_response 和process_exception

daccb0e6297ffdc2efe2f33ce0b2af88.png

b8119f11a3d4bee8f1626897e899a1fa.png

这两个方法他在干什么呢?

我们先看第一个if 判断 正常我们在用scrapy的时候你是没在meta 传这个键值 "dont_retry" 这个的意思就是 不去重试直接返回响应

第二个if 判断 就是说你会在setting文件中设置 一个默认重试的状态码他会去判断如果我们访问出现 默认设置的状态码 就会进行重试 也就是第三个方法 '_retry' 这个方法

  • settings文件中 的默认状态码设置以及最大重试次数

6d3a343eb15936676725217b69e7542c.png
  • 我们在看看 初始化方法 max_retry_times 和retry_http_codes 也就是最大重试次数和重试的状态码

9c6db7b7a7b6dfac2e435b07a50d8687.png

来我们看看在看看 _retry 的这个方法

7f7a2faeb6100732c130fe7d79a7d160.png
  • 底下还有一截 不太重要就是一些响应和else 说一下超过最大次数 这页面就访问失败了

在来看看我们重写middleware之后的 代码

start_date 
  • 我重写了 process_response 和process_exception 这两个方法 然后自己加了一个save_url 的方法~ ok!
  • save_url 的方法是怎么判断他执行保存failed_url呢 !答案就是和 源码的 _retry方法一样 我会在process_response 和 process_exception 两个方法中, 重试之前加一个save_url 方法让他在重试之前我去判断一下这个重试次数是否超过最大重试次数 如果大了 我们就把这个url存下来就可以 如果没大 我们就正常调用_retry 方法进行重试 等等...注:
    • 该类继承自 RetryMiddleware,也就是源码的 类继承
    • 需关闭 默认重试中间件 开启自定义中间件

183e14f40d7ae90cdb6ceed799334ca1.png
    • 不知道还有什么坑点啦。遇到问题欢迎补充哈哈!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值