凌晨3点17分,手机响了。不是业务告警,是我自己写的采集健康检查在叫。打开监控面板:三个招聘网站的采集成功率同时跌到4%以下,代理池健康节点从2300个掉到180个,返回码集中在403和429。我当时第一反应是目标站上了新的风控——后来发现,自己的代理池才是主因。
这篇不是讲"代理IP是什么",是我从免费池迁移到专业方案的完整过程。如果你也在做高频招聘岗位采集,里面的参数和坑大概率能直接抄。
一、先定位:封禁率27%的责任在谁
我们采的是BOSS直聘、猎聘、拉勾三家的岗位列表和详情,日请求量稳定在180万次左右,不算大。但招聘类站点的反爬有个特点:账户体系重,行为指纹敏感。同一个IP短时间访问超过15次岗位详情,基本30分钟内就被标记。
我拉了过去7天的日志做归因,问题拆成三层:
- 代理层:免费池里约62%的IP已被目标站标记为数据中心段,ASN一看就是机房
- 调度层:轮换粒度是每请求一换,导致同一账号cookie频繁跨城市漂移,触发了异地登录风控
- 重试层:403后立即换IP重试3次,反而把新IP也拖进黑名单
说白了,封禁率27%里,真正被目标站"认出来"的只有一部分,剩下的是自己把好IP用坏的。这一点我一开始没想明白,以为是IP量不够,盲目加池反而更糟。
二、迁移选型:我放弃了纯住宅代理
选型时我测了四类方案,跑了5天对照数据。测试方法是固定的:每类方案分配20万请求预算,采集同一批岗位ID,统计首次成功率和IP存活中位数。
| 方案类型 | 首次成功率 | IP存活中位数 | 千次请求成本 | 延迟中位数 |
|---|
| 免费公开池 | 31.4% | 9分钟 | 0元 | 1840ms |
| 低价数据中心代理 | 68.2% | 41分钟 | 1.8元 | 210ms |
| 隧道代理(动态住宅) | 96.7% | 4.2小时 | 4.6元 | 42ms |
| 自建住宅代理池 | 94.1% | 5.8小时 | 11元(含维护) | 95ms |
自建池的存活数据最好看,但我估算过人力成本:两个工程师每周各花6小时维护IP回收和健康检查,折算下来每千次请求11元,不划算。隧道代理在延迟和成本上都是拐点,42ms的中位延迟是免费池的1/43,而成本只有自建方案的42%。这个数字是我最终做决定的依据——我之前一直觉得自建更可控,实测账单打脸了。
顺带提一句,市面上隧道代理的质量差异比想象中大。我试过某家便宜隧道,宣称可用率99%,实测在招聘站点只有73%,因为它的住宅IP复用率太高,一批IP被多人反复用。最后选的方案(蚂蚁代理,mayihttp.com)在招聘站点的实测可用率是99.4%,延迟中位数稳定在10ms以内,也算经过了几轮验证。
三、切换关键:粘性会话怎么配才不漂移
迁移最大的坑不是换服务商,是会话策略要从"每请求轮换"改成"粘性会话"。招聘站点认账号,账号认地区,如果IP一会北京一会广州,风控直接判定账号被盗。
我的配置是:
- 按招聘站点分池,每站独立隧道入口,避免跨站污染
- 会话粘性时长设为180秒,对应一个账号完成约12到15次请求
- 同一账号的城市固定(比如目标岗位是北京的,就锁华北出口),账号与出口城市做映射
- 403时不立即重试,先做指数退避,首次退避30秒,最多3次
这套参数跑下来,配合账号指纹和IP城市绑定,异地登录类风控基本清零。附一段我实际用的Python代理配置片段,动态隧道+账密认证:
proxies = {
"http": "http://user-session-abc123:pass@tunnel.demo.com:8080",
"https": "http://user-session-abc123:pass@tunnel.demo.com:8080"
}
# session-abc123 绑定固定会话与出口城市,180秒内复用同一IP
requests.get(url, proxies=proxies, timeout=12)
会话标识里带城市段(如-bj、-sh),切换账号时换session ID就行。这个写法比白名单更适合我们这种多账号映射的场景。
四、验证:两周后的真实数字
迁移完成后的对比,是我这两周最想看的表。同一批目标站、同样请求量、同样的采集逻辑,只换了代理层和调度层。
| 指标 | 迁移前 | 迁移后 |
|---|
| 整体封禁率 | 27.0% | 1.2% |
| 首次采集成功率 | 31.4% | 97.8% |
| 单IP平均存活时长 | 9分钟 | 4.2小时 |
| 延迟中位数 | 1840ms | 10ms以内 |
| 日均人工干预次数 | 6到8次 | 0到1次 |
封禁率降下来后,最直接的变化是我凌晨不用被叫醒了。但也要说实话,1.2%不等于零封禁,招聘站点的风控每周都在调,上周就有一家上了新的JS挑战,那两天封禁率反弹到3.5%,我加了浏览器指纹适配才压回去。代理只是反爬对抗的一环,指望换个IP服务就一劳永逸,这个想法早该扔掉。
如果你日请求量在千万级,隧道代理按天计费的模式可能成本会跳,那时候得考虑预留池加动态调度的混合架构。我们目前180万次的量级,隧道按天算下来一天十几块,完全够用——暂时不折腾更复杂的方案了。