大规模网页抓取:2026 代理与重试优化指南
TL;DR: 大规模网页抓取先压缩重复请求,再扩容:静态页面直接下载,动态字段按需渲染,多节点共享访问配额。代理按会话、地区和健康状态管理;扩容以有效记录成本和任务积压时间验收,不以请求量验收。
先算配额与成本,再加节点
假设获准抓取 100,000 页,允许平均每秒 2 次请求,首次下载至少需要 13.9 小时;额外 5,000 次重试再占用约 42 分钟。这是容量计算,不是推荐速率:增加节点或代理不能扩大目标站的授权配额。
先选取覆盖不同模板的 200 页作为测试样本;该数量仅是起始配置。逐档测试并发 2、4、8,记录:
| 指标 | 用途 |
|---|---|
| 去重且校验通过的记录数/分钟 | 衡量真实吞吐 |
| 总请求数÷首次请求数 | 识别重试放大 |
| 最老待处理任务年龄 | 检查更新时效 |
| 每千条有效记录总成本 | 判断扩容收益 |
| 写入积压与浏览器内存 | 定位下游瓶颈 |
若吞吐不再增长,错误或积压却增加,应回退并发。多节点的限速预算必须共享,重试也要扣减预算。
将下载、渲染与写入拆开
优先检查授权接口或导出功能;能从 HTML 获取字段,就不启动浏览器。
| 路径 | 适用任务 | 主要代价 |
|---|---|---|
| 授权接口 | 分页、增量同步 | 配额与字段权限 |
| Scrapy/异步 HTTP 客户端 | 静态页面 | 连接池与响应内存 |
| Playwright | 必须执行脚本的字段 | 浏览器内存与会话管理 |
Scrapy 配置文档说明了域名级并发控制,但单节点设置不能替代集群限速。Playwright 定位器文档说明了自动等待机制;应等待目标字段满足条件,而非每页固定休眠 5 秒。
流水线采用“持久化队列 → 共享限速 → 下载/渲染 → 校验 → 写入 → 确认任务”。静态和浏览器任务分队列,避免慢渲染阻塞轻量下载。
写入使用稳定业务键,例如“来源+商品标识+地区”。如果进程写入后、确认消息前退出,重新投递应更新同一记录,而不是插入副本;另存采集时间与解析器版本,方便追查模板变更。
把代理当作可观测的连接资源
建立代理配置表,至少记录协议、出口地区、会话标识、凭据引用和健康状态。EProxies 提供覆盖 195+ 个国家的 72M+ 住宅 IP,支持 HTTP(S) 与 SOCKS5;池规模不代表特定站点的成功率。
- 独立详情页: 可轮换出口,但仍遵守共享限速。
- 登录、购物车或连续分页: 绑定代理、Cookie 与游标;更换出口可能使会话失效。
- 地区价格或库存: 固定目标地区,并将地区写入结果,避免混合不同市场的数据。
- 故障隔离: 分开统计代理连接失败、目标站拒绝和解析失败,不要用换 IP 掩盖授权问题。
例如,以最近 100 次连接为观察窗口,连续 3 次代理连接失败后暂时隔离出口,并用少量请求验证恢复;这是试运行配置,需按样本调整。凭据存入密钥管理系统,日志脱敏,停用账号及时撤销凭据。排查顺序见网页抓取中避免 IP 封禁的方法。
先削减下载,再优化计算
增量同步要包含删除策略
通过获准使用的站点地图或接口生成网址清单,规范化、去重后入队。接口提供更新时间或游标时保存检查点;价格和描述可分别设定更新周期,不必每轮重抓全部字段。
记录未出现在增量结果中不等于已删除。使用删除事件、明确的不存在响应或获准的周期核对处理下架数据,详见使用 API 制定网页抓取策略。
条件请求与内容哈希用途不同
保存服务器的 ETag 或 Last-Modified,下次发送对应条件头;服务器支持时,未变化资源可返回无正文的 304,但仍消耗一次请求。RFC 9110 第 13 节定义了条件请求;本地计算的哈希只能用于下载后去重,不能冒充服务器的 ETag。
用背压防止内存失控
缓冲区同时限制条数和字节数,例如“1,000 个响应或 200 MB,任一达到即暂停派发”,再按实测页面大小调整。仅限制条数,少量大响应仍可能耗尽内存。
许可允许时短期保存原始响应,解析器修复后离线重放,减少重新下载。实施清单见网页抓取脚本优化的 12 个步骤。
按错误类型恢复
| 错误 | 操作 |
|---|---|
| 超时、临时断连 | 检查连接池,对安全读取有限重试 |
429 | 降低对应域名或账户速率,处理等待指示 |
401、403 | 暂停任务,核查凭据和授权 |
404 | 标记不存在,停止即时循环重试 |
持续 5xx | 暂停来源,避免重试风暴 |
200 但字段缺失 | 保存响应,隔离解析错误 |
RFC 6585规定 429 可以携带 Retry-After;该字段可为秒数或 HTTP 日期。没有等待指示时,可从“最多重试 3 次、等待上限 60 秒”的带抖动指数退避开始测试,并设置任务截止时间;超预算任务进入死信队列。
用有效产出核算费用
计算示例:100,000 次首次请求加 5,000 次重试,每次计费传输量为 200 KB,按十进制合计 21 GB。若得到 95,000 条有效记录,代理单价为每 GB P,则每千条有效记录的代理费用为 21 × P ÷ 95。
还需计入浏览器计算、存储和运行费用,并核实失败请求与上传流量是否计费。扩容前后使用同一批样本和校验规则;新增节点只增加重试而不缩短积压时间,就不应保留。
常见问题
如何有效管理代理?
集中维护代理配置和凭据,按目标站、地区、会话分配出口;有状态任务绑定代理与 Cookie,无状态任务才轮换。分别监测连接成功率、延迟和目标站状态码,对连接故障出口隔离后探测恢复。代理池与域名限速分开管理,不能通过换出口绕过授权配额。
如何处理网页抓取中的错误?
按网络、限流、权限和解析四类处理,不要统一重试。临时网络错误有限退避,429 降速,权限错误暂停核查,字段缺失保存响应供修复。
扩大网页抓取规模时有哪些常见挑战?
主要瓶颈是访问配额、浏览器资源、重复投递和存储积压。分别用共享限速、独立渲染队列、幂等写入和有界缓冲控制,再检查有效吞吐是否增长。
大规模网页抓取适合使用哪些工具?
静态页面使用 Scrapy 或异步 HTTP 客户端,必须运行脚本时使用 Playwright,授权接口直接处理分页与增量。多节点还需要持久化队列和幂等存储,验收时测试进程退出后的任务恢复。
应该先增加并发还是代理数量?
先确认瓶颈:站点限流应降速,渲染或存储积压应修复对应环节。只有出口连接容量不足且授权配额有余量时,才增加代理资源。
返回 HTTP 200 就代表抓取成功吗?
不代表,正文可能是登录页或提示页。校验内容类型、业务标识和必填字段,去重后才计入有效产出。
公开网页可以直接用于商业分析或模型训练吗?
公开可访问不等于取得再利用许可,应核查条款、内容许可和个人信息处理要求。RFC 9309明确指出,robots.txt 规则不是访问授权;数据集应保存来源和许可依据,并支持删除。
本文由 EProxies 团队撰写,经内部质量标准核查与人工审核后发布。