客户端轮换
ISP IP 永久稳定——没有 session 字段、没有网关轮换。需要按请求换 IP 时,由你的客户端挑。本页给出常见模式。
轮询
最简单:按清单顺序循环。
import itertools, requests
with open("isp.txt") as f:
lines = [l.strip() for l in f if l.strip()]
cycle = itertools.cycle(lines)
def get(url):
ip, port, user, password = next(cycle).split(":", 3)
proxy = f"http://{user}:{password}@{ip}:{port}"
return requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)优点:简单。缺点:失效 IP 仍会被选中。
轮询 + 健康追踪
记录失败次数,在冷却窗口内跳过失效 IP:
按任务粘性
任务单元需要稳定 IP(登录流程、多步购买),把单个 IP 锁定到任务:
一致性哈希让重启或重跑同一 task_id 总落到同一 IP。
并发上限
单 ISP IP 吞吐很高(1 Gbps+),但多数目标站点会按 IP 限流。对单一目标站,每 IP 起步建议 5 个并发,分摊到整批后线性扩展。
跨进程协同
多 worker 共用一批 IP 时,用共享存储(Redis、etcd)协调轮换与健康追踪。Redis 简单版:
健康追踪可用按 cooldown_until 排序的 sorted set,跳过 now() 之后的条目。
不该轮换的情况
如果使用场景是账号绑定(登录抓取、发帖、监控已登录的仪表盘),不要轮换。每账号锁定一个 IP。使用 ISP 的初衷就是 IP 稳定,轮换会让它失效。
现成的轮换工具
反检测浏览器(AdsPower、Multilogin、GoLogin)— 每个浏览器画像分配不同 ISP IP
Proxifier — OS 层按导入清单轮询
Scrapy + scrapy-rotating-proxies — 中间件读清单做轮换
Apify SDK proxy configuration — 传入清单后自动轮换
多数生产栈用爬虫框架自带的轮换器就够了,上面的代码用于需要自定义逻辑时。
最后更新于
这有帮助吗?