爬虫轮换 IP
爬虫怎么轮换 IP:三种做法和各自的坑
轮换 IP 有三种做法:网关自动换、会话锁定、自己维护池子。讲清各自的适用面和常见翻车点。
做法一:交给网关,每个请求换一个
最省事的一种。你的代码里 proxy 地址永远是同一个网关,网关在后面替你挑出口 IP。改一行配置就能上,不用维护任何状态。
适合翻页采集、列表页抓取这类每个请求彼此独立的任务。不适合任何需要跨请求保持身份的流程——上一秒登录成功,下一秒换了 IP,会话大概率就废了。
做法二:粘性会话,一段时间锁住同一个出口
在认证信息里带上一个会话标识,网关就会在有效期内把这个标识的流量固定到同一个出口 IP。需要登录、加购物车、多步表单的流程必须用这个。
坑在于有效期。会话时长设得太短,流程走到一半 IP 就换了;设得太长,一个 IP 上堆的行为太多,反而更容易被标记。按你单条流程的实际耗时来定,留一点余量就够,不要一律拉满。
做法三:自己拿一批静态 IP 维护池子
买一批静态住宅或数据中心 IP,在自己代码里做分配、健康检查和熔断。控制力最强,工作量也最大。
值得这么做的情况其实不多,主要是两类:一是你需要 IP 和业务账号严格一一对应(比如多账号运营,每个账号必须永远同一个出口);二是你的调度策略很特殊,通用网关满足不了。其余情况自己造轮子通常不划算。
轮换频率不是越快越好
很多人默认"每个请求都换"最安全,其实不一定。真实用户浏览一个站点时 IP 是不变的,一个会话里连续换 IP 本身就是异常特征。
更实际的做法:按目标站点分别定策略。抓静态列表页可以每请求换;抓带登录态的页面就用粘性会话;抓有明显速率限制的接口,重点不是换 IP 而是控制单 IP 的请求速率。
换 IP 解决不了的问题,别指望换 IP
被拦的原因不一定是 IP。TLS 指纹、User-Agent 和 Header 顺序不一致、Cookie 没带、请求速率过快,这些换多少个 IP 都一样会被拦。
排查顺序建议是:先用浏览器手工访问确认页面能打开,再用同样的 Header 从代理发一次请求,最后才是怀疑 IP。把失败按状态码和响应体特征分类记录,比盲目加大 IP 池有用得多。
与其纠结,不如先测一次
读完还是拿不准,就用最小额度跑一遍真实目标站点。