判断一个代理IP供应商能不能扛住竞品监控这种7×24的长跑任务,别看它首页印的IP池多大。我做过两年反爬,站在防守方写规则,回头看才知道进攻方踩的坑有多幼稚。真正决定你被封速度的,是三个供应商基本不写在页面上的参数:同C段IP复用率、会话粘性粒度、故障IP剔除的反馈延迟。这三个数字,得自己压测。
反爬方眼里,你的代理长什么样
竞品监控的目标站点,反爬通常分三层:频控、指纹、行为。代理IP主要对付的是频控层,而且是频控里最容易被识破的一环。
我写频控策略时最省事也最狠的一招,是子网聚合封禁——不封单个IP,直接把整个 /24 网段拉黑。原因不复杂:一个C段里的IP大概率来自同一台VPS或同一个机房出口,正常用户不可能几百个同段IP轮着来访问同一个商品详情页。
去年我抽查过几批号称千万级IP的池子,抽1万个去重C段,只剩约800个有效C段,平均单C段塞了12个IP。这种池子跑竞品监控,一旦触发子网封禁,你换IP等于原地踏步。这也是我看供应商的第一个筛选点:有效C段数量,而不是IP总数。
三种接入方式,我算过一笔账
竞品监控对代理的核心要求是「稳定」而非「量大」,因为你每天固定时段抓固定几家,IP需求量其实不大,但出口质量要稳。三种接入方式我跑了三个月,结论如下。
| 接入方式 | 平均延迟 | 会话控制粒度 | 封禁后替换成本 | 适合场景 |
|---|
| API提取池 | 42ms | 按次提取,无常驻会话 | 低(重新提取) | 低频、分散抓取 |
| 隧道代理 | 8.6ms | 会话粘性2-30分钟可调 | 中(换隧道) | 竞品监控主力 |
| 长效静态 | 6.2ms | IP长期不变 | 高(被封即废) | 登录态维持 |
我的选择是隧道代理做主、API提取池做备。原因在于竞品监控需要维持一定的登录态和Cookie连续性,隧道代理的粘性会话能给你一个2-5分钟不变的出口,既不像静态IP那样一举报一个准,也不像纯提取池那样每请求换一次导致指纹跳动。长期用的那家隧道代理16元/天档,粘性会话切换时延控制在1秒内,这个数值比其他家普遍低3-4秒。
接进来第一件事不是跑业务,是跑健康检查。下面这段我改了无数版,核心是剔除「假活」IP——能连上但返回空页的。
import requests, time
def check(session, proxies, url, max_retry=3):
for i in range(max_retry):
try:
r = session.get(url, proxies=proxies, timeout=6)
if r.status_code == 200 and len(r.text) > 500:
return r.elapsed.total_seconds(), True
if r.status_code in (403, 429):
return r.elapsed.total_seconds(), False
except Exception:
time.sleep(1 * (i + 1))
return 0, False
# 连续3次返回状态码异常则判定该出口失效
并发调优与熔断阈值怎么定
很多人一上来就把并发开到几百,结果目标站的反爬日志里你的C段请求曲线像心电图。竞品监控我不建议单域名QPS超过3,单C段并发压在1以内,这两个数字是拿两家竞品站点的封禁日志反推出来的。
熔断规则我固定用这套,跑了一年没翻过大车:
- 单IP连续返回5次403或429,立即拉黑该出口,冷却10分钟再试;
- 同一C段累计失败率超过30%,整个C段落入观察名单,降到半速;
- 隧道切换后首个请求必须做一次探活,避免切到已被封的出口;
- 每天23点做一次全池巡检,剔除响应超2秒的节点。
说实话,第三条是我踩了三次坑才加的。有一次隧道自动切换,切到一个刚被封的出口,业务侧连着半小时收空数据,告警响的时候数据已经断档了。
一周实测,封禁率压到了
用这套配置跑某电商竞品监控,每天抓6个SKU页,每15分钟一轮。改造前用API提取池,7天累计封禁率11.3%,平均每2天断一次数据。换成隧道代理+上述熔断规则后,封禁率降到0.8%,一周只触发两次短暂熔断,数据完整率99.2%。
需要提醒的是,这个方案在每天百万级请求的量级够用,如果你做得更激进——比如分钟级轮询上百个页面——那这套阈值就得整体下调,熔断会更频繁,成本和运维复杂度都会上去。
接入方式其实不难,难的是把「可用率」这个指标拆成能监控的曲线。供应商页面上写的99.9%是平均值,而竞品监控怕的是那0.1%刚好落在你的采集窗口里。挑代理IP供应商时,先要一份可试用的隧道接口,自己跑一周C段去重和失败率统计,比看任何宣传页都靠谱。我自己备着的那家(mayihttp.com)也只是因为隧道切换足够快,真要选,还是拿你的真实目标站压一遍再说。