所有分类
  • 所有分类
  • 攻略

动态代理IP请求重试机制,爬虫任务异常自愈代码示例

动态代理ip请求重试机制,爬虫任务异常自愈代码示例
——让“封IP”变成“自动换IP”的保姆级教程

一、先别急着换框架,90%的崩溃是“没重试”
很多小伙伴一遇到403、502就把锅甩给Scrapy、requests,其实大部分时候只是代理IP当场去世,程序却傻站着等死。把重试+自愈写进代码里,单核笔记本也能跑出云服务器的气势。

二、选代理IP的长尾关键词:高匿动态住宅代理IP、按量计费短效IP、HTTP/HTTPS/Socks5混拨
别搜“免费代理”了,那玩意连百度首页都刷不开。真正稳的是“高匿动态住宅代理IP”,京东、抖音、小红书都认不出你是机器人;再配合“按量计费短效IP”,失败就扔,成本按次算,比包月便宜一半。

三、重试机制三板斧:退避、换头、换脸

  1. 退避:第一次失败sleep(1),第二次sleep(3),第三次sleep(5),别猛冲,服务器一看就知道你是爬虫。
  2. 换头:把User-Agent、Referer、Accept-Language随机抽一个列表,每次重试换一套,伪装成浏览器。
  3. 换脸:代理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_APIUA_POOL, Scrapy原生享受动态代理ip请求重试机制,爬虫任务异常自愈,老板看你都像看锦鲤。

采购代理IP请添加微信客户经理:x31471626

阅读全文
原文链接:https://sk5ip.com.cn/hangyezixun/%e5%8a%a8%e6%80%81%e4%bb%a3%e7%90%86ip%e8%af%b7%e6%b1%82%e9%87%8d%e8%af%95%e6%9c%ba%e5%88%b6%ef%bc%8c%e7%88%ac%e8%99%ab%e4%bb%bb%e5%8a%a1%e5%bc%82%e5%b8%b8%e8%87%aa%e6%84%88%e4%bb%a3%e7%a0%81%e7%a4%ba/,转载请注明出处~~~
0
分享海报

评论0

请先
显示验证码

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码