搜索抓取

错误率与抓取速率:服务器抖动之后,蜘蛛为什么来得少了

抓取速率并不是固定值,蜘蛛会按站点的健康度动态调整。5xx、超时、连接中断这类错误会直接压低抓取频率,而且下降快、恢复慢。本文说明哪些响应会被算作错误、运维侧能做的几件稳定措施,以及错误率降下来后为什么不能急着催抓取。

搜索抓取

错误率与抓取速率:服务器抖动之后,蜘蛛为什么来得少了

很多人把抓取速率当成一个固定值:页面有多少、链接有多深,蜘蛛就该按某个节奏来。实际更接近一份“信誉额度”——站点稳定,额度就往上调;服务器频繁出错,额度会被主动收紧。而影响这份额度最直接的一个指标,就是错误率。

蜘蛛为什么盯着错误率看

对蜘蛛来说,抓取的成本是带宽和时间。如果它连续请求回来的都是 5xx、超时或者连接被重置,继续加大并发只会浪费资源,也谈不上拿到内容。所以抓取调度里通常会有一份按主机统计的健康度:错误率上升,抓取频率下降;错误率回到正常区间,频率再慢慢加回来。

这个机制带来两个容易被忽略的后果。第一,惩罚和恢复并不对称——掉下去可能只需要几分钟的连续报错,涨回来却要好几天稳定表现。第二,影响范围常常是主机级或目录级的,一个接口报错,可能连带把整站其他正常页面的抓取节奏一起拖慢。

哪些情况会被算作“错误”

  • 5xx 类响应:数据库连不上、应用异常、网关报错。
  • 连接超时、TLS 握手失败、响应体传输中途断开。
  • 大量重定向,或跳转最终落到错误页,抓取路径直接中断。
  • 限速与防护规则误伤,返回 403、429 而不是正常内容。

其中 429 和 503 属于“有礼貌的拒绝”,蜘蛛一般会按临时状态处理,但频繁出现同样会压低抓取速率。

运维侧能做的几件事

  1. 让失败状态码说真话。维护页、降级页返回 200 是最糟的做法——蜘蛛会把空页面当成正常内容收下。临时不可用就返回 503,并带上 Retry-After 说明多久后再来。
  2. 控制超时。应用层超时最好短于服务端和网关的超时,避免请求悬着不返回,最后变成蜘蛛侧的超时。
  3. 静态化高频页面。首页、栏目页、文章详情这些被抓最多的地址,尽量走缓存或静态文件,减少对数据库和下游接口的依赖。
  4. 把抓取流量和用户流量分开看。给校验过来源的蜘蛛单独做监控面板,才能看清是不是只有蜘蛛在报错。
  5. 发版避开抓取高峰。如果站点有明显的抓取时段,把重启、迁移、批量任务挪开,减少无谓的 5xx。

恢复期不要急着“催”

错误率降下来之后,抓取量往往不会立刻回到原位。这段时间能做的是保持稳定:不额外提交大量 URL、不改动 URL 结构、不做全站跳转,让蜘蛛按自己的节奏试探着多抓几个请求。如果这会儿又出现新的报错,前面的恢复基本白费。

抓取速率的本质是一份信任额度,稳定比快更重要。一次十分钟的宕机,可能需要几天的平稳运行来弥补。

该盯哪几个数

在服务端日志里按小时看:5xx 占比、平均响应时间、超时次数、蜘蛛请求的成功率。抓取量突然下降,通常是前面几小时错误率先涨了。反过来,抓取量迟迟上不去,也值得先确认是不是别的原因——DNS 解析、TLS 配置,或者入口页面本身就没几条能走的链接。

把错误率当成一条长期看的曲线,比等抓取量掉了再回头排查要省事得多。