搜索抓取

429 与抓取限速:服务器拒绝请求后的抓取恢复观察

抓取日志里出现 429,往往不是蜘蛛放弃抓取,而是服务器或中间层主动限速。本文区分 429 与 503 的差异,梳理限速常见的来源层级、Retry-After 的作用,并给出确认限速发生与调整恢复节奏的核对清单,帮助判断抓取量下降到底来自策略拦截还是资源不足。

搜索抓取

429 与抓取限速:服务器拒绝请求后的抓取恢复观察

在抓取日志里看到搜索蜘蛛的请求集中返回 429,往往不是蜘蛛主动放弃,而是服务器或中间层把请求挡了回去。429 表达的是速率层面的拒绝,不是内容不存在,也不是永久不可访问。它会影响 URL 发现之后的实际抓取覆盖,因此值得单独观察。

429 和 503 要分开看

503 通常意味着服务端暂时无法处理请求,可能来自过载、维护窗口或后端异常;429 的含义更具体:服务本身能处理,只是来源的请求速率超出了当前允许的范围。两者的恢复方式不同。503 需要等资源恢复;429 需要调整速率,或者把被误限的来源放行。把它们混在一起统计,会看不清问题出在容量还是策略。

限速常见来自哪一层

  • CDN 或 WAF 的频率规则,按 IP、按路径或按 UA 触发。
  • 源站的限流模块,例如按连接数、按请求速率设置的阈值。
  • 安全插件把高频访问的蜘蛛 UA 当成异常流量处理。
  • 共享主机对单 IP 并发上限的限制。

这些层通常不区分搜索蜘蛛和普通高频访问,只要触发阈值就会被拦。抓取量下降时,先确认是策略拦截还是真的资源不足,再决定处理方式。

Retry-After 与退避节奏

返回 429 时如果带上 Retry-After,相当于告诉蜘蛛多久之后再来。这个头能让退避有依据,减少密集重试带来的额外压力。缺少这个头时,退避节奏只能由蜘蛛自行判断,恢复时间可能被拉长,也可能出现刚恢复就再次触发限速的来回拉扯。

限速不是一次性事件,而是一段需要观察的速率协商过程。

怎样确认限速真的在发生

  1. 按状态码统计日志,看 429 是否集中在特定时段或特定路径。
  2. 看响应时间。被限速的请求往往响应极短,因为请求没有进入实际处理就返回了。
  3. 按来源 IP 分组,确认是单一 IP 触发还是整体被限。
  4. 查看 CDN 控制台的拦截统计,区分边缘拦截和回源阶段的问题。

恢复节奏的调整方向

  • 把已验证的蜘蛛来源加入白名单,但白名单要有更新机制,来源段会变化。
  • 对抓取来源放宽并发限制,而不是直接全部放行。
  • 把批量任务、备份、其他采集工具安排在蜘蛛活跃时段之外,减少叠加压力。
  • 恢复后先看 429 比例是否下降,再看抓取请求量是否回升,不要一放开就期待回到满速。

容易被忽略的细节

限速阈值如果设得很低,正常抓取也会长期踩线;设得太宽,又起不到保护作用。更实际的做法是按路径区分:列表页、分页这类被抓频率高的路径适当放宽,后台、搜索接口、下单接口严格限制。这样既能保住 URL 发现的入口,也不会让真正需要保护的接口暴露在过高并发下。

另外,429 只反映速率,不反映内容质量变化。抓取量下降时,如果排除了限速因素,仍需回到抓取日志、Sitemap 覆盖和内链入口去核对,不要把所有抓取波动都归到限速上。