第 112 章 分布式抓取与频率对抗(代理池 / IP 轮换 / 会话工程)
前几章解决"单次请求看起来像人";本章解决"大规模请求整体不被封":代理池、IP 轮换、频率随机化、会话管理。绕过 Bot Protection 的最后一公里——再真实的指纹,高频请求也会暴露。
📍 知识点地图 | 主题:分布式与频率对抗 | 前置:第107/110章 | 后续:— | 核心概念:代理池、IP轮换、频率随机化、会话隔离
112.1 为什么需要分布式(频率暴露一切)
核心矛盾:
单次请求做得再真实(第 107 章)
→ 高频/规律请求仍是"机器信号"
暴露模式:
□ 固定间隔(1s/2s 恒定 → 定时器特征)
□ 单一 IP 高 QPS(人类不会每秒请求 10 次)
□ 无会话变化(同一指纹长期高频)
□ 模式可预测(每天同一时间同一行为)
目标: 让整体流量"像多个真实用户"
→ 分布式 = 多 IP + 随机化 + 会话隔离
112.2 代理分类与选型
代理类型:
数据中心代理(机房 IP):
□ 便宜/快/数量大
□ 缺点: IP 信誉低(易被 Bot 检测识别)
住宅代理(真实家庭 IP):
□ 信誉高(像真实用户)
□ 缺点: 贵/慢/数量少
移动代理(手机 IP):
□ 信誉最高(移动流量信任度高)
□ 最贵
轮换代理(每次请求新 IP):
□ 适合高频
□ 缺点: 无会话粘性(登录态易掉)
选型原则:
弱防护/普通抓取 → 数据中心轮换
强防护(Akamai/Kasada)→ 住宅/移动
登录会话 → 粘性代理(同 IP 维持会话)
112.3 代理池管理工具
ProxyCat(仓库素材): 代理池管理与 IP 轮换
□ 池化: 多代理统一管理
□ 轮换策略: 随机/按权重/按会话
其他:
自建代理池(收集+验证+心跳)
商业代理 API(住宅代理按量计费)
负载均衡(多出口)
关键能力:
□ 健康检查(失效代理剔除)
□ 会话粘性(同一任务同 IP)
□ 失败切换(超时自动换)
□ 速率控制(每 IP 限额)
112.4 频率对抗工程(核心方法论)
原则: 随机化 > 均匀化(人类行为天然不规则)
请求间隔(关键):
均匀 1s → 机器特征
随机 0.5-3s(对数正态分布)→ 类人
例: interval = exp(normal(mean, sigma))(对数正态采样)
并发控制:
□ 每 IP 并发限制(人类浏览器并发有限)
□ 全局速率限制(总量控制防封)
□ 突发控制(不在同一秒爆发)
时间模式:
□ 错峰(不同任务不同时段)
□ 随机暂停(不定时休息)
□ 业务节奏(先浏览后操作,第 107.6)
112.5 会话管理(多任务隔离)
问题: 多任务共用指纹/会话 → 被关联(一起封)
方案:
□ 每任务独立指纹配置(第 110.8 指纹稳定性工程)
□ 每任务独立 user_data_dir(浏览器数据隔离)
□ 每任务独立代理(IP 隔离)
□ 会话持久化(断点续跑不重来)
架构:
任务调度器
→ 分配 (任务, 指纹配置, 代理, 频率配置)
→ 独立执行
→ 结果+状态存储
112.6 大规模抓取架构(完整工程)
┌─────────────────────────────────────┐
│ 任务队列(待抓取 URL/参数) │
└──────────────┬──────────────────────┘
↓
┌─────────────────────────────────────┐
│ 调度器(分配 任务→指纹→代理→频率) │
└──────────────┬──────────────────────┘
↓
┌─────────────────────────────────────┐
│ Worker 池(多个执行单元) │
│ ├─ Worker 1: 指纹A + 代理1 + 限速 │
│ ├─ Worker 2: 指纹B + 代理2 + 限速 │
│ └─ ... │
└──────────────┬──────────────────────┘
↓
┌─────────────────────────────────────┐
│ 结果存储(数据 + 状态 + 失败重试) │
└─────────────────────────────────────┘
工程要点:
□ 断点续跑(崩溃恢复)
□ 失败重试(指数退避)
□ 速率自适应(被限制时降速)
□ 监控(成功率/IP 封禁率)
112.7 常见封禁模式与对策
| 封禁模式 | 原因 | 对策 |
|---|---|---|
| IP 封禁 | 高频/触发防护 | IP 轮换/降速/错峰 |
| 指纹封禁 | 指纹被关联 | 指纹轮换(110.8) |
| 账号封禁 | 登录行为异常 | 会话真实化/频率控制 |
| 范围封禁 | 触发 WAF 规则 | 请求模式随机化 |
| 永久封禁 | 多次违规 | 换出口(IP+指纹) |
检测信号(被封前的警告):
□ 响应变慢/超时增多
□ 出现挑战页(升级验证)
□ 特定状态码(403/429 比例升高)
→ 发现信号立即降速/换出口
112.8 检查清单
□ 代理选型(按防护强度)
□ 代理池管理(健康检查/轮换/粘性)
□ 频率随机化(对数正态间隔)
□ 并发控制(每 IP 限额)
□ 会话隔离(任务独立指纹/代理)
□ 断点续跑
□ 失败重试(指数退避)
□ 监控(成功率/封禁率)
□ 封禁预警信号
动手练习
- 用 ProxyCat(或自写脚本)管理 10 个代理,实现随机轮换 + 健康检查。
- 对比"固定 1s 间隔" vs "对数正态随机间隔"的请求模式(画分布图)。
- 搭一个 2-Worker 的抓取架构(不同指纹+代理),跑一个测试任务。
- 模拟一次"被封→降速→恢复"流程,记录信号和对策。
深入阅读
- 本教材:第 110 章(指纹稳定性/工具链)
- 本教材:第 106-107 章(单请求的真实性——本章是整体频率层)
- 仓库:
skills/pentest-tools/SKILL.md(ProxyCat 工具) - 外部: 住宅代理服务文档、抓取架构工程实践