使用requests配合urllib3的重试机制是提高爬虫稳定性的常见方法,通过配置HTTPAdapter实现自动重试。示例中定义create_session_with_retry函数,利用Retry类设置总重试次数、触发重试的状态码列表、允许重试的请求方法及退避因子。tenacity库提供更灵活的重试控制,支持任意函数的指数退避重试,适用于复杂场景。对于简单需求,可手动结合try-except与循环实现重试逻辑,便于调试。生产环境推荐使用requests+urllib3组合,合理设置重试参数以避免对服务器造成压力。

爬虫在请求网页时,常会遇到网络波动、目标服务器响应慢或临时封禁等问题。为提高稳定性,加入异常重试机制非常必要。Python中可通过多种方式实现请求失败后的自动重试。
requests库底层依赖urllib3,可以通过配置HTTPAdapter来启用连接重试功能。这是最常见且稳定的方法。
以下是一个设置请求重试的示例:
import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry <p>def create_session_with_retry(retries=3, backoff_factor=0.5): session = requests.Session() retry_strategy = Retry( total=retries, # 总重试次数(包含首次请求) status_forcelist=[429, 500, 502, 503, 504], # 遇到这些状态码时重试 method_whitelist=["GET", "POST"], # 允许重试的请求方法 backoff_factor=backoff_factor # 重试间隔时间增量 ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("http://", adapter) session.mount("https://", adapter) return session</p><h1>使用示例</h1><p>session = create_session_with_retry(retries=3) try: response = session.get("<a href="https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697">https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697</a>") print(response.status_code) except requests.exceptions.RequestException as e: print(f"请求失败: {e}")</p>
说明:
tenacity是一个更灵活的Python重试库,支持任意函数的重试,不限于网络请求。
千鹿Pr助手
智能Pr插件,融入众多AI功能和海量素材
128
查看详情
from tenacity import retry, stop_after_attempt, wait_exponential
import requests
<p>@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, max=10))
def fetch_url(url):
print(f"正在请求: {url}")
response = requests.get(url, timeout=5)
response.raise_for_status()
return response</p><h1>调用</h1><p>try:
res = fetch_url("<a href="https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697">https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697</a>")
print(res.status_code)
except requests.exceptions.RequestException as e:
print(f"最终失败: {e}")</p>特点:
对于简单场景,可以直接使用try-except加循环实现重试逻辑。
import requests
import time
<p>def get_with_retry(url, max_retries=3, delay=1):
for i in range(max_retries):
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return response
else:
print(f"状态码异常: {response.status_code},第{i+1}次尝试")
except requests.exceptions.RequestException as e:
print(f"请求出错: {e},第{i+1}次尝试")</p><pre class='brush:python;toolbar:false;'> if i < max_retries - 1:
time.sleep(delay * (2 ** i)) # 指数等待
return Noneresp = get_with_retry("https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635") if resp: print("请求成功") else: print("最终失败")
这种方法便于调试和自定义逻辑,适合小型项目或学习用途。
基本上就这些。根据项目复杂度选择合适的重试方案,推荐生产环境使用requests+urllib3组合,兼顾性能与可控性。重试机制虽好,也要注意设置合理次数和间隔,避免对目标服务器造成压力。
以上就是Python爬虫怎样使用异常重试机制_Python爬虫请求失败自动重试的设置方法的详细内容,更多请关注其它相关文章!
相关文章:
铁路12306的积分有效期是多久_铁路12306积分有效期说明
Django表单提交验证失败后保持字段值不刷新
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
浏览器打开即用 美图秀秀网页版入口
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
蛙漫官方正版入口 蛙漫网页在线全集免费观看
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Go语言中JSON数据解码与字段访问指南
响应式图片在网页设计中的正确实现方法
淘宝网网页版登录入口 淘宝官方网页版快捷登录
LINUX怎么安装MySQL_LINUX数据库安装配置教程
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
Python Socket多播通信中指定源IP地址的实践指南
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
Go语言HTML解析:利用Goquery精准获取指定元素内容
React Router 嵌套组件中 URL 重定向问题的解决方案
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
必由学官方平台入口 必由学在线课堂登录地址
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
AO3同人作品网入口 AO3搜索引擎官网永久地址
响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
zookeeper 都有哪些功能?
msn官网入口地址手机版 msn官方网站手机最新链接
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
Mac终端命令大全_Mac常用Terminal指令速查
解决Django多数据库/多Schema环境下外键迁移问题
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
Python实时数据流中的动态最值查找策略
12306选座系统怎么选连座_12306选座多人连坐操作方法
抖音网页版快捷访问 抖音网页版网页版入口操作教程
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
Win11网速慢怎么解决 Win11网络设置优化解除限速
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
外媒分析《GTA6》定价:卖100美元可以但真没必要!