Java 爬虫要做到“稳、高效、不易被封”,关键从来不是把代理塞进代码就结束,而是把代理当成采集系统的一部分来设计:连接池怎么用、并发怎么分配、失败怎么重试、429怎么退避、出口怎么分池、会话怎么保持,以及如何把“采集行为”做得更像正常访问。只要其中一环做错,就会出现典型反噬:线程越多越慢、重试风暴把自己打进黑名单、IP 池越大越漂移、数据口径越跑越不一致。
下面按“架构策略、连接池、代理池、重试退避、指纹与 Header、监控与熔断、落地清单”给一套可照抄的配置方案,并自然融入易路代理的落地方式。
一、先明确目标:不易被封靠“低噪声”,高效率靠“可控预算”
1、效率不是线程数,是成功率乘以稳定吞吐
你真正要优化的是:单位时间内稳定拿到的有效数据量。高线程但高超时、高 429,反而会让吞吐下降。
2、不易被封不是更随机,而是更可解释
最容易被识别的并不是你用了代理,而是你表现出:
- 同一出口短时间过高并发;
- 失败后无上限重试;
- 访问节奏过于一致;
- 请求头与 TLS 行为异常。
因此策略应是:按出口预算限并发、按信号退避、按用途分池隔离。
二、连接池怎么设计:长连接复用+按路由隔离是稳的前提
1、推荐思路:每个代理出口都有自己的连接池配额
如果你用 OkHttp、Apache HttpClient、Netty 等,核心原则一致:
- 连接复用提升吞吐;
- 但不要让一个连接池“同时跑所有出口”。
否则会出现:某出口抖动拖垮全局、连接复用命中混乱、排查极难。
更稳的结构是:
- 代理池内的每个出口有“并发上限”;
- 全局线程池按出口上限发放“令牌”;
- 连接池层面设置总连接数与每主机连接数,避免拥塞。
2、关键参数建议
- connectTimeout:短一些,避免卡死线程;
- readTimeout:按页面复杂度设定,不要无限大;
- keepAlive:开启,尽量复用连接;
- maxConnections:按出口数与单出口并发预算计算,不要拍脑袋。
经验规则:
- 单出口并发先保守,例如 2 到 10,跑稳后再加;
- 全局并发由“出口数 × 单出口并发”决定,而不是由 CPU 核数决定。
三、代理池怎么配:采集池、验证池、对照池分开
1、采集主力池:机房为主,强调吞吐与预算
用于批量采集、列表页、分页抓取。策略是:
- 每出口设 QPS 与并发上限;
- 429 比例上升先降速退避;
- 异常出口自动熔断冷却。
2、验证与复查池:更稳的线路,强调可复现
用于关键详情页、价格库存复查、异常固证。策略是:
- 固定少量出口集合,长期复用;
- 会话固定,减少口径漂移;
- 低频严记录,保证复现。
3、对照池:用来识别差异化投放或反爬策略
有些站点对机房与住宅展示不同内容。对照池低频运行即可:
- 同 URL,机房与住宅各跑一次;
- 发现差异再升级策略。
不要把对照池当成吞吐池,否则成本高、且更不稳。

四、重试与退避怎么做:把失败预算限制住,防止自我放大
1、重试次数要少,且只对可重试错误
建议底线:
- 连接失败与超时:最多重试 1 到 2 次;
- 解析失败:通常不重试或极少重试;
- 业务状态异常:不要盲目重试,先换策略或降频。
2、指数退避加抖动是必须的
例如:200ms、500ms、1s、2s 上限封顶,并加随机抖动,避免线程齐步重试。
3、遇到 429 或 503:先降速,再切换
最常见的错误是:429 一出现就立刻换 IP 并狂跑,这会触发更严反制。正确顺序:
- 降低该域名的并发与 QPS;
- 进入冷却窗口;
- 若持续异常,再在同池内小范围切出口;
同时给该站点设置“失败时最大流量预算”,避免雪崩。
五、请求层怎么做得更像正常访问:一致性优先
1、Header 与 UA 不要乱拼
保持稳定、合理的 UA 与 Accept-Language,避免每请求都随机。随机过度会更像机器人。
2、节奏控制比“伪装”更有效
- 列表页与详情页交替;
- 关键页之间加入合理停顿;
- 同一域名不要集中爆发式抓取。
3、会话与 Cookie 策略要分目的
- 发现型抓取:可用短会话,减少个性化干扰;
- 复现型验证:用固定会话保持一致;
混用会导致数据漂移与误报。
六、观测与熔断怎么做:让系统自动避开坏出口与高风险窗口
1、每出口健康评分
至少统计:
- 成功率;
- P95 延迟;
- 超时率;
- 429 比例;
低于阈值就熔断一段时间,冷却后半开探测恢复再放量。
2、按域名维度做限速
很多限流是“域名级”而不是“全局级”。对不同站点设置不同并发预算,避免一个站点把全系统拖慢。
七、易路代理:把代理池化与预算化,爬虫才会长期稳
如果你已经遇到“线程越多越慢”“429 一高就全线崩”“换 IP 也没用”“数据口径漂移难复现”,本质是缺少按用途分池与按出口预算的治理机制。易路代理更适合用来把这套采集工程落地:你可以把采集主力池、验证复查池、对照池按用途拆开管理;为采集池配置可控出口集合,并配合每出口并发与 QPS 预算,让吞吐稳定提升,而不是靠堆线程;遇到限流时,通过健康评分与熔断半开自动降权坏节点,避免重试风暴把池子打脏;需要复现时,再用固定集合稳定取数,让数据口径更一致。把代理当成可管理的资源池,而不是随机换 IP 的工具,才是“稳、高效、不易被封”的长期解法。