很多人把抓取速率当成一個固定值:頁面有多少、連結有多深,蜘蛛就该按某個节奏来。實际更接近一份“信誉額度”——站点稳定,額度就往上調;服務器频繁出错,額度會被主動收紧。而影响這份額度最直接的一個指标,就是错誤率。
蜘蛛為什么盯着错誤率看
對蜘蛛来说,抓取的成本是带宽和時間。如果它连續請求回来的都是 5xx、超时或者连接被重置,繼續加大並發只會浪費资源,也谈不上拿到内容。所以抓取調度里通常會有一份按主机統計的健康度:错誤率上升,抓取频率下降;错誤率回到正常区間,频率再慢慢加回来。
這個机制带来两個容易被忽略的後果。第一,惩罚和恢复並不對称——掉下去可能只需要几分钟的连續报错,涨回来却要好几天稳定表現。第二,影响范围常常是主机級或目錄級的,一個接口报错,可能连带把整站其他正常頁面的抓取节奏一起拖慢。
哪些情况會被算作“错誤”
- 5xx 類响應:資料库连不上、應用異常、網關报错。
- 连接超时、TLS 握手失敗、响應体传輸中途断開。
- 大量重定向,或跳轉最终落到错誤頁,抓取路径直接中断。
- 限速與防護規則誤伤,返回 403、429 而不是正常内容。
其中 429 和 503 属于“有礼貌的拒绝”,蜘蛛一般會按临时狀態處理,但频繁出現同样會压低抓取速率。
运维侧能做的几件事
- 让失敗狀態碼说真话。维護頁、降級頁返回 200 是最糟的做法——蜘蛛會把空頁面当成正常内容收下。临时不可用就返回 503,並带上 Retry-After 說明多久後再来。
- 控制超时。應用层超时最好短于服務端和網關的超时,避免請求悬着不返回,最後變成蜘蛛侧的超时。
- 静態化高频頁面。首頁、栏目頁、文章詳情這些被抓最多的地址,尽量走缓存或静態文件,减少對資料库和下游接口的依赖。
- 把抓取流量和用戶流量分開看。给校驗過来源的蜘蛛單獨做监控面板,才能看清是不是只有蜘蛛在报错。
- 發版避開抓取高峰。如果站点有明顯的抓取时段,把重啟、迁移、批量任務挪開,减少無谓的 5xx。
恢复期不要急着“催”
错誤率降下来之後,抓取量往往不會立刻回到原位。這段時間能做的是保持稳定:不額外提交大量 URL、不改動 URL 结构、不做全站跳轉,让蜘蛛按自己的节奏试探着多抓几個請求。如果這會儿又出現新的报错,前面的恢复基本白費。
抓取速率的本质是一份信任額度,稳定比快更重要。一次十分钟的宕机,可能需要几天的平稳執行来弥补。
该盯哪几個數
在服務端日誌里按小时看:5xx 占比、平均响應時間、超时次數、蜘蛛請求的成功率。抓取量突然下降,通常是前面几小时错誤率先涨了。反過来,抓取量迟迟上不去,也值得先確認是不是別的原因——DNS 解析、TLS 配置,或者入口頁面本身就没几條能走的連結。
把错誤率当成一條長期看的曲线,比等抓取量掉了再回头排查要省事得多。