Python Requests 抓取失败时的重试设置

6 sec read

最近在抓取数据的时候,经常遇到连接超时的问题,分析原因居然是DNS污染导致的,为了让程序更加稳健,需要对requests请求实现失败重试的逻辑。

先前介绍过,Python中异常重试解决方案。这次搜索发现,Requests本身就支持失败重试的设置。具体设置如下:

python源码重点的实现:

Retry的设计比较简单,在HTTPConnectionPool中根据返回的异常和访问方法,区分是哪种链接失败(connect? read?),然后减少对应的值即可。然后再判断是否所有的操作重试都归零,归零则报MaxRetries异常即可。不过对于每次重试之间的间隔使用了一个简单的backoff算法。

使用重试有几点需要注意:

  • 如果使用get等简单形式,默认会重试3次
  • 重试只有在DNS解析错误、链接错误、链接超时等异常是才重试。在比如读取超时、写超时、HTTP协议错误等不会重试
  • 使用重试会导致返回的错误为MaxRetriesError,而不是确切的异常。
打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

含C/C++代码包Anaconda安装问题

上篇文章主要讲了libffm在Windows系统下安装遇到的问题,今天在Linux环境下的Anaconda中安
1 min read

FFM/libffm在Windows上的使用

FFM 的作者Yu-Chin Juan在GitHub上开源了C++版本的代码libffm,由于日常的数据处理都
5 min read

使用Python获取照片Exif信息

什么是Exif? Exif(Exchangeable image file format)是专门为数码相机的照
4 min read

2 Replies to “Python Requests 抓取失败时的重试设置”

  1. 你这个代码写的,真丑,一点想看的欲望都没有

发表评论

电子邮件地址不会被公开。 必填项已用*标注