动态代理ip请求重试机制,爬虫任务异常自愈代码示例
——让“封IP”变成“自动换IP”的保姆级教程
一、先别急着换框架,90%的崩溃是“没重试”
很多小伙伴一遇到403、502就把锅甩给Scrapy、requests,其实大部分时候只是代理IP当场去世,程序却傻站着等死。把重试+自愈写进代码里,单核笔记本也能跑出云服务器的气势。
二、选代理IP的长尾关键词:高匿动态住宅代理IP、按量计费短效IP、HTTP/HTTPS/Socks5混拨
别搜“免费代理”了,那玩意连百度首页都刷不开。真正稳的是“高匿动态住宅代理IP”,京东、抖音、小红书都认不出你是机器人;再配合“按量计费短效IP”,失败就扔,成本按次算,比包月便宜一半。
三、重试机制三板斧:退避、换头、换脸
- 退避:第一次失败sleep(1),第二次sleep(3),第三次sleep(5),别猛冲,服务器一看就知道你是爬虫。
- 换头:把User-Agent、Referer、Accept-Language随机抽一个列表,每次重试换一套,伪装成浏览器。
- 换脸:代理IP立刻踢掉,从池子里拉新的,高匿动态住宅代理IP平均响应<500 ms,几乎无感切换。
四、异常自愈代码示例(Python 3.9,requests版,100行以内能跑)
import requests, random, time, logging
from itertools import cycle
# 1. 代理池——高匿动态住宅代理IP,按量计费短效IP
proxy_api = 'http://api.xxx.com/get?num=10&type=dynamic&anon=3'
proxy_list = requests.get(proxy_api).json()['proxy']
proxy_pool = cycle(proxy_list)
# 2. 请求头池——模拟Win10+Chrome
ua_pool = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15'
]
# 3. 自愈重试
def safe_get(url, timeout=8, max_retry=5):
for attempt in range(1, max_retry+1):
try:
headers = {'User-Agent': random.choice(ua_pool)}
proxy = {'http': 'http://' + next(proxy_pool), 'https': 'http://' + next(proxy_pool)}
r = requests.get(url, headers=headers, proxies=proxy, timeout=timeout)
if r.status_code == 200:
return r.text
except Exception as e:
logging.warning(f'第{attempt}次失败,已自动换IP:{e}')
time.sleep(attempt * 2) # 退避
return None
# 4. 跑任务
if __name__ == '__main__':
for i in range(100):
html = safe_get('https://httpbin.org/ip')
print(html)
复制就能跑,把proxy_api
换成你自己的高匿动态住宅代理IP通道,失败自动踢,成功自动攒,日志里只看得到“已自动换IP”,再也不用手动重启。
五、常见坑排雷
- 代理IP有效期只有3分钟?把
max_retry
调到3次,超时设5秒,别浪费钱。 - 目标站反爬是“滑块”不是“封IP”?重试机制救不了,得上打码平台,但高匿动态住宅代理IP至少不会提前暴露你。
- 多线程?记得给每个线程单独一个
proxy_pool
副本,否则大家抢一个IP,瞬间死光。
六、成本速算
按量计费短效IP 0.03元/次,跑1万条数据最多300元;免费代理ip时间成本一天,被封账号重置成本无价。自己选。
七、一键升级Scrapy
把上面的safe_get
封装成RetryMiddleware
,在settings.py
里替换掉默认RetryMiddleware
,加两行PROXY_POOL_API
和UA_POOL
, Scrapy原生享受动态代理ip请求重试机制,爬虫任务异常自愈,老板看你都像看锦鲤。
采购代理IP请添加微信客户经理:x31471626
阅读全文
评论0