爬虫采集用代理IP的失败重试与退避设计-易代理
采集系统跑得稳不稳,看失败处理。代理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代理