今年Q2,国内某头部房产平台把反爬策略从"单IP频次阈值"改成了"IP出口城市 + UA指纹 + 访问路径"的三维校验。我维护两年多的那套代理池,当天夜里就废了——42个采集节点里有31个在半小时内全部返回空页面。不是403,也不是验证码,是干干净净的"该城市暂无房源数据"。这种假数据比封禁恶心得多,它会安安静静写进你的数据库,等你三天后做报表才发现。
我每天跑的请求量在120万上下,覆盖全国337个城市的二手房挂牌价。下面不复述代理IP的基础概念,只复盘这半年踩的三个坑,以及每个坑背后那条能被量化的红线。
踩坑一:买了"杭州IP",出口却在嘉兴
最早图省事,我按城市名去筛选,供应商后台勾选"杭州",提一批就用。跑了一周做数据校验,发现杭州西湖区的均价跟嘉兴南湖区几乎重合,明显不对。
抽查500个标称"杭州"的IP做归属地核验(三个第三方IP库交叉比对,再看平台页面自带的城市面包屑),城市级匹配率只有76.4%。也就是说每四个IP里就有一个是挂名的,基站实际落在绍兴、嘉兴、湖州。
这个问题在做地域关键词排名追踪时同样致命。你要看的是"上海用户搜这个词排第几",IP落到苏州,拿回来的SERP(搜索结果页)就是另一套结果,排名数据直接失真。所以选SEO代理IP,第一道门槛从来不是池子大小,是地理精度。
| IP类型 | 实测城市匹配率 | P95延迟 | 适用场景 |
|---|
| 普通动态机房IP | 76.4% | 11ms | 不限地域的通用采集 |
| 运营商号段IP | 99.2% | 9ms | 城市级排名、房价、本地生活 |
| 移动4G/5G拨号 | 99.6% | 68ms | 高风控平台 |
现在的做法很简单:所有城市级任务,接入时先跑一轮归属地校验,不匹配的直接进黑名单。代价是池子瞬间缩水两成,但脏数据归零。这一步写进了上线checklist,一分钟跑完,省掉后面两周的对账。
踩坑二:轮换调成"每请求一次",封禁率从8%涨到34%
这个坑我踩得挺蠢。看到封禁率上升,第一反应是"IP用得不够散",于是把轮换粒度改成每次请求换一个。跑了两天,封禁率从8.1%冲到34.7%,而且封的不只是IP,几个机房段整段被拉黑。
翻日志才看明白:同一个城市列表页,60秒内从20个不同IP打过来,UA一致、无头浏览器指纹一致、访问路径一致。对端风控模型里,"IP之间的关联性"权重已经高过"单IP频次",你换得越勤,特征越明显。
- 会话粘性设30–90秒,跑完一个城市的一个页码区间再换
- 粘性键用城市编码+区县ID+页码段,别拿IP本身做键
- 同一城市的并发出口IP数压在8–15个,超过就排队
def pick(city_code, page_no):
bucket = city_code + str(page_no // 5)
sess = pool.get(bucket) # 粘性键不含IP
if sess and sess.age() < 90:
return sess.proxy
return pool.new(bucket, sticky_ttl=90)
改完之后封禁率回到6.3%,比最初还低——因为行为特征收敛了。
踩坑三:标称99.9%可用率,凌晨实测97.4%
供应商页面上写着可用率99.9%、延迟低于10毫秒,我一开始是信的。直到有天凌晨跑全量,脚本挂了三次才去翻监控曲线。
| 时段 | 实测可用率 | P95延迟 | 失败主因 |
|---|
| 02:00–06:00 | 97.4% | 42ms | 机房维护、号段回收 |
| 09:00–12:00 | 99.91% | 8.6ms | 偶发限流 |
| 20:00–23:00 | 99.72% | 14.3ms | 高峰期排队 |
"99.9%"是全天均值,而我的跑批窗口刚好压在维护窗口上。这点很少有人提:谈可用率必须问清统计口径和采样时段,否则你买到的只是别人白天的99.9%。
后来自建健康检查:每5分钟对城市池抽样200个IP打一次目标站,连续两次失败即熔断切备用池。加进来之后,夜间跑批成功率从91%回到99.3%。
选型清单:五条能直接抄的红线
- 城市匹配率要求先验≥98%,不合规不入池
- 会话粘性30–90秒可配,且粘性键允许自定义
- 可用率要提供分时段曲线,不接受单一均值
- API提取、账密认证、白名单三种接入同时可用(白名单通道在故障时往往还活着,救过我一次)
- 并发上限写进合同,别等跑起来才发现是软限
按这五条筛,市面上能全过的其实不多。我目前主力用的是蚂蚁代理(mayihttp.com),城市覆盖365个以上、能按城市维度直接提IP,夜间那段实测可用率也没掉太多——但说实话,我更看重它三套接入方式同时开着,出问题时有退路。
补一句边界:这套方案在每天百万级请求、300多个城市轮转的量级够用。如果你要做千万级、秒级的地域排名监控,光靠一个SEO代理IP池撑不住,得把任务调度和IP生命周期绑在一起设计,那是另一个坑了。