轮换不是越勤越好

海外代理的计费与国内短效不同,多数按流量或按 IP 计费,但轮换逻辑同样关键。同一个目标站,每请求换 IP 和固定会话,成功率与数据可用性往往差别很大。先想清楚一件事:目标站判断你"是不是同一个人",依据的不只是 IP,还包括会话、Cookie、请求节奏。IP 换得太快,反而会出现"每次都是新访客"的异常特征。

三种轮换模式

  • 每请求轮换:每个 HTTP 请求换一个新出口,适合抓公开列表页、搜索结果、价格页一次性的数据。
  • 粘性会话:通过会话标识把一段时间内的请求绑定到同一出口,常见有效期从几分钟到几十分钟,适合多步页面流程、需要保持登录态的采集。
  • 固定时长 IP:领取一条 IP 后按小时或按天使用,适合账号运营、需要稳定地理身份的长任务。
# 粘性会话:同一 session 参数在有效期内复用同一出口
sticky = "http://user-sess-abc123:pass@gate.example.com:8000"

# 每请求轮换:不传 session,网关每次分配新 IP
rotating = "http://user:pass@gate.example.com:8000"

import requests
for url in urls:
    r = requests.get(url, proxies={"http": rotating, "https": rotating}, timeout=(5, 20))

多数网关通过用户名里的会话标识或独立参数区分模式,接入时注意不要把会话串写进密码段,否则容易出现认证成功但会话失效的怪现象。

按场景选模式

做电商比价、公开目录抓取,用每请求轮换,速度快、成本可控。做广告投放验证,用粘性会话更合适,因为落地页、埋点、跳转链路需要同一会话上下文才能看全。做社交或后台类操作,固定时长 IP 几乎是唯一选择,频繁换 IP 会直接触发二次验证。

一个实用的判断方法:如果任务的每一步都依赖上一步的响应(登录、点击、提交),就必须粘性;如果每一步都是独立取数据,才可以每请求轮换。

轮换频率过高会露馅

三类特征最容易暴露:一是同一账号在短时间内来自多个国家或城市,地理漂移不自然;二是时区、语言头与 IP 归属地不一致,例如 IP 在美国但浏览器时区是东八区;三是请求间隔的分布过于均匀,缺乏人类操作的随机性。轮换策略要和浏览器指纹、时区、语言设置保持一致,否则换再多 IP 也过不了风控。

先确定"身份"设定(国家、城市、时区、语言、设备),再决定 IP 轮换模式。顺序反过来,成本会成倍增加。

成本控制的两个细节

一是按流量计费时,图片、字体、视频是主要消耗项,采集正文时可在代理侧或客户端屏蔽静态资源,常见能省下七成以上流量。二是粘性会话的有效期选择,够用就行,把会话拉得过长会占用 IP 资源,短于任务完成时间则需要重试重登,反而增加开销。

小结

轮换模式的选择本质是回答一个问题:你的任务需要"看起来是同一个人",还是"每次都是陌生人"。前者用粘性和固定 IP,后者用每请求轮换,两者混用会两头不讨好。