很多人把抓取速率当成一个固定值:页面有多少、链接有多深,蜘蛛就该按某个节奏来。实际更接近一份“信誉额度”——站点稳定,额度就往上调;服务器频繁出错,额度会被主动收紧。而影响这份额度最直接的一个指标,就是错误率。
蜘蛛为什么盯着错误率看
对蜘蛛来说,抓取的成本是带宽和时间。如果它连续请求回来的都是 5xx、超时或者连接被重置,继续加大并发只会浪费资源,也谈不上拿到内容。所以抓取调度里通常会有一份按主机统计的健康度:错误率上升,抓取频率下降;错误率回到正常区间,频率再慢慢加回来。
这个机制带来两个容易被忽略的后果。第一,惩罚和恢复并不对称——掉下去可能只需要几分钟的连续报错,涨回来却要好几天稳定表现。第二,影响范围常常是主机级或目录级的,一个接口报错,可能连带把整站其他正常页面的抓取节奏一起拖慢。
哪些情况会被算作“错误”
- 5xx 类响应:数据库连不上、应用异常、网关报错。
- 连接超时、TLS 握手失败、响应体传输中途断开。
- 大量重定向,或跳转最终落到错误页,抓取路径直接中断。
- 限速与防护规则误伤,返回 403、429 而不是正常内容。
其中 429 和 503 属于“有礼貌的拒绝”,蜘蛛一般会按临时状态处理,但频繁出现同样会压低抓取速率。
运维侧能做的几件事
- 让失败状态码说真话。维护页、降级页返回 200 是最糟的做法——蜘蛛会把空页面当成正常内容收下。临时不可用就返回 503,并带上 Retry-After 说明多久后再来。
- 控制超时。应用层超时最好短于服务端和网关的超时,避免请求悬着不返回,最后变成蜘蛛侧的超时。
- 静态化高频页面。首页、栏目页、文章详情这些被抓最多的地址,尽量走缓存或静态文件,减少对数据库和下游接口的依赖。
- 把抓取流量和用户流量分开看。给校验过来源的蜘蛛单独做监控面板,才能看清是不是只有蜘蛛在报错。
- 发版避开抓取高峰。如果站点有明显的抓取时段,把重启、迁移、批量任务挪开,减少无谓的 5xx。
恢复期不要急着“催”
错误率降下来之后,抓取量往往不会立刻回到原位。这段时间能做的是保持稳定:不额外提交大量 URL、不改动 URL 结构、不做全站跳转,让蜘蛛按自己的节奏试探着多抓几个请求。如果这会儿又出现新的报错,前面的恢复基本白费。
抓取速率的本质是一份信任额度,稳定比快更重要。一次十分钟的宕机,可能需要几天的平稳运行来弥补。
该盯哪几个数
在服务端日志里按小时看:5xx 占比、平均响应时间、超时次数、蜘蛛请求的成功率。抓取量突然下降,通常是前面几小时错误率先涨了。反过来,抓取量迟迟上不去,也值得先确认是不是别的原因——DNS 解析、TLS 配置,或者入口页面本身就没几条能走的链接。
把错误率当成一条长期看的曲线,比等抓取量掉了再回头排查要省事得多。