抓取量下滑时,很多人先去看 robots、Sitemap、内鏈结构,却忽略了一個更基础的因素:服務器回得够不够快。蜘蛛是按時間预算工作的訪客,响應時間一旦變長,它不會等你,而是把抓取配額挪到別處去。
响應時間為什么直接影响抓取量
蜘蛛單位時間里能發起的請求是有限的。同样十分钟,每個頁面 200 毫秒能抓几百個,每個頁面 3 秒就只能抓几十個。所以响應時間不只是性能問题,它直接决定了被抓走的 URL 數量。
更關键的是排队机制。同一時間可能只有少量並發连接在抓你的站,單個請求變慢,连接就被占住,後面的 URL 只能干等。慢的不是一個頁面,而是整條队列。
蜘蛛大概會等多久
- 几百毫秒到两秒内返回,抓取节奏通常看不出明顯變化;
- 连續超過數秒,抓取频次往往開始下滑,尤其是短時間内反复出現时;
- 達到超时阈值,請求被放弃,日誌里可能只留下一條中断记錄,或者干脆什么都没有。
具体阈值各家爬虫不同,也會随站点歷史表現浮動:一直稳定的站,偶尔慢一次影响有限;長期偏慢的站,會被整体降速,恢复也需要時間。
慢在哪里,要拆開看
日誌里只有一個總耗时,但成因通常分几层:
- 網絡與 TLS:握手慢、回源遠,CDN 未命中时最明顯;
- 後端處理:資料库慢查询,或者模板里同步調用了第三方接口;
- 動態渲染:每次訪問都現算的頁面,抓得越多越慢。
建议按分位值判断,而不是只看平均值。P50 正常、P95 很慢,說明是少量 URL 拖累了整体,定位范围會小很多。
超时、5xx 和 429 不是一回事
三者都會影响抓取,但作用路径不同,處理方式也不同:
- 超时:蜘蛛拿不到响應,通常會降低對本站的抓取频率,等站点恢复後再逐步试探;
- 5xx:被理解為服務器端故障,连續出現时降速更明顯,恢复正常抓取的時間也更長;
- 429:是明确的“慢一点”信号,配合 Retry-After 使用,可以主動把抓取压到服務器能承受的范围,比硬撑到超时要好。
不過 429 用過头也會把蜘蛛劝退。長期只返回 429 的目錄,可能被逐渐忽略,甚至在一段時間内不再被排入队列。
優化顺序:先省掉不必要的工作
- 让蜘蛛也走缓存,静態頁和列表頁尽量命中 CDN 或頁面缓存;
- 减少首屏依赖的外部請求,特別是同步調用的第三方接口;
- 把重查询和复杂模板改寫或预生成,不要让每次抓取都触發一遍;
- 检查頁面在抓取时是否触發了寫操作,比如計數、寫日誌、實时推荐計算。
調完後看哪些指标
至少對比這几項:抓取频次、平均與 P95 响應時間、超时和 5xx 占比、單次抓取的平均字节數。如果响應時間已经降下来,抓取量却没涨,那就该回头查抓取路径、内鏈结构和内容本身的價值,別把所有問题都归到速度上。
把响應時間压下来,是提高抓取量的必要條件,而不是充分條件。頁面值不值得抓,最终仍由内容和结构决定。