蜘蛛抓取一個 URL,從建立连接到拿到 HTML,中間要跨過網絡、服務器排队、應用處理和資料库查询几道环节。任何一环變慢,單次抓取的耗时都會變長;慢到超過蜘蛛的等待阈值,這次抓取就直接作废。
一次抓取的耗时都花在哪
從蜘蛛的视角看,時間大致分三段:连接建立(DNS、TCP、TLS)、等待首字节(TTFB)、接收正文。前两段偏網絡和服務器层,第三段取决于頁面体积和带宽。真正容易被忽略的是 TTFB,它包含服務器排队和應用生成頁面的全部時間。
- 连接阶段慢:多半是线路、DNS 解析或證书握手的問题。
- TTFB 高:常见于後端查询慢、鎖等待、模板渲染重、缓存未命中。
- 传輸阶段慢:HTML 体积大、下载资源多、出口带宽被占满。
超时與断连之後會發生什么
蜘蛛對單次請求有等待上限,超過就不再等。连接被中断、返回不完整的 HTML,通常不會记成一次有效抓取,而是算一次失敗。失敗次數多了,常见後果是:
- 该 URL 的抓取频率被下調,回爬間隔拉長。
- 同目錄、同主机的其他 URL 也會受牵连,整体节奏放缓。
- 如果失敗集中在某台机器或某個接口,相關頁面可能長期停在舊快照。
要注意,慢和挂是两種不同的信号。持續返回 200 但每次都要十几秒,比偶發一次 503 更容易拖垮整体抓取效率,因為它不會触發明顯的告警。
慢响應如何拉低整站抓取量
蜘蛛的抓取同时受並發和配額约束。假设同一時間能開 N 個连接,單頁耗时從 0.3 秒變成 3 秒,相同時間内能抓完的 URL 就少了一個數量級。表現上就是:日誌里蜘蛛来得挺勤,但每天覆盖的 URL 數一直上不去,深處頁面迟迟進不了队列。
反過来,响應稳定在几百毫秒,即使站点規模不小,蜘蛛也更容易把有限的容量用在發現和確認新 URL 上,而不是反复重试同一批慢頁面。
怎么观察自己的响應表現
- 按蜘蛛 UA 過滤訪問日誌,統計响應時間分布,別只看平均值,重点看 P95、P99。
- 把 5xx、超时、连接重置單獨計數,和時間点對齐,看是否集中在某個时段或某台机器。
- 区分動態頁和静態頁,很多站点慢的是列表頁和搜尋頁,首頁反而很快。
- 核對 CDN 回源比例,回源率高的时段 TTFB 通常同步變差。
可落地的處理顺序
不必一上来就做大改造,按影响面排優先級更划算:
- 先降超时率:找出连續报错的接口,能修就修,修不了的先让它返回明确的狀態碼,而不是一直挂着。
- 再压 TTFB:补缓存、给慢查询加索引、把重渲染的頁面做静態化或预生成。
- 控制並發:蜘蛛和真實用戶抢同一批资源时,给抓取留出通道,避免高峰互相拖慢。
- 管住 5xx:短時間大量 5xx 會被当成站点不稳定,回爬节奏恢复起来比降下去慢得多。
不管是靠内鏈、Sitemap 還是其他方式做 URL 發現,最终都要落到服務器能在合理時間内把頁面交出去這一步。發現得再快,交付跟不上,抓取量也不會增長。
抓取效率的下限往往不是“蜘蛛愿不愿意来”,而是“服務器能不能及时把頁面交出去”。稳定性先立住,URL 發現和内鏈優化才有意义。