爬虫采集用代理IP的失败重试与退避设计-易代理

本站 · 2026-11-01 最新资讯 14

采集系统跑得稳不稳,看失败处理。代理IP 再好,也救不了“超时就立刻重试三次同IP”的写法。

一、重试要带指数退避

pythonfor attempt in range(3):    try:        return fetch(url, proxy)    except (ProxyError, Timeout):
        proxy = proxy_pool.mark_fail_and_pick(proxy)
        time.sleep(2 ** attempt)

2 的 n 次方退避,避免把目标站和代理层一起打爆。

二、错误要分类型处理

  • 连接超时:换出口

  • 读取超时:换出口 + 降并发

  • 429:不换IP先休眠

  • 403:查 UA/Cookie/Referer 再决定

  • 空响应:标记隧道断,回测出口

把错误分类计数,才能区分“代理脏”还是“代码糙”。

三、重试次数别写死全局

不同目标站阈值不同:

  • 低风控公开页:重试 2 次

  • 中风控列表页:重试 3 次换 3 出口

  • 强风控接口:重试 1 次即暂停

重试不是无限兜底,是给网络抖动留缓冲。

四、死信队列单独补采

连续失败的任务进死信队列,不阻塞主流程:

pythonif fail_streak >= 3:
    dead_letter.put(task)

凌晨低峰或换池后统一补采。主链路保吞吐,异常链保完整。

五、代理层只管出口,不管业务语义

中间件里:

  • process_request:发代理

  • process_response:回写成功

  • process_exception:换出口

别在代理层改业务头、别伪造环境。请求环境在客户端统一封装,代理只做出口调度。

爬虫采集用代理IP,重试设计的核心是指数退避 + 错误分类 + 死信隔离。


相关标签:代理ip,ip代理,http代理,代理服务器ip,开放代理,文档中心,新闻,动态住宅ip,ip池,socks5代理

微信客服

微信客服

扫码添加客服

QQ 咨询

新用户专享 注册免费送 IP 5000个 高质量 IP 免费领取 立即领取