蜘蛛分给每個站点的抓取资源是有限的。同一時間它要處理大量站点,能给某個入口頁的抓取次數、單次带走的頁數、每次停留的時間,都受到額度约束。蜘蛛池做得有没有意义,很大程度上看這点額度有没有花在有效路径上,而不是看入口頁铺了多少個。
抓取预算由哪几部分构成
通常可以拆成三层来理解:
- 抓取速率:同一時間蜘蛛愿意對某個站点發多少個請求。它取决于服務器响應速度、错誤率和歷史抓取表現。
- 抓取频次:蜘蛛隔多久回来看一次。它更看重内容更新信号和頁面重要性,而不是入口頁的數量。
- 抓取深度:一次訪問里,蜘蛛愿意沿着連結往下走几层。层數越多,底层頁面分到的份額越少。
三者互相牵制。响應慢會压低速率,速率低又限制了深度;入口頁太多而彼此没有主次,频次就會被摊薄。
哪些設定會白白消耗額度
- 多重跳轉鏈。入口頁到目标頁经過三四個跳轉,蜘蛛每跳一次都要重新排队,實际到達目标頁的概率下降。
- 連結依赖 JS 渲染。首屏 HTML 里没有可抓連結,蜘蛛需要額外渲染资源,成本更高,也更容易提前登出。
- 參數化 URL 無限生成。带篩選、排序、會话參數的連結被大量輸出,蜘蛛會把這些当成新頁面反复抓取。
- 体积過大的頁面和阻塞资源。图片、字体、第三方脚本拖慢首字节,速率限制往往先被触發。
- 入口頁只有外鏈、没有内鏈结构。蜘蛛爬到這一頁就走到了尽头,額度花完却什么也没带走。
入口层、中轉层、目标頁怎么分配
按层分配比平均撒開更有效,也更容易观察。
入口层:控制數量,保證可達
入口頁的职责是被找到、把連結往下传。數量不必堆到极限,頁面越少,單頁能分到的抓取频次越多。入口頁首屏應有稳定的文字連結指向中轉层,連結數量控制在几十個以内,避免一頁几百條連結把注意力摊平。
中轉层:压缩跳數
從入口頁到目标頁,跳數越長,中途丢失的概率越高,一般两跳以内比較稳妥。中轉层頁面不需要复杂设計,但要有清晰的連結分组,让蜘蛛一次能带走一批目标 URL。
目标层:只放值得抓的 URL
目标 URL 要排優先級。最需要被發現的一批放在更容易到達的位置,其余分批轮換。不要把目标站所有頁面一次性平铺,蜘蛛抓不完,剩下的自然被跳過。
看什么指标判断预算是否用對了
- 抓取日誌里入口頁與目标頁的請求比例。若入口頁反复被抓、目标頁很少出現,說明路径有問题。
- 單次訪問的頁面數分布。長期集中在 1 到 2 頁,通常意味着連結结构或响應速度拖了後腿。
- 狀態碼构成。大量 3xx、5xx 會降低蜘蛛對该站点的抓取意愿。
- 回訪間隔。稳定回訪比偶發的高峰更有參考價值。
發現異常时,優先改路径和响應速度,而不是繼續加入口頁。加更多頁面只是把同样的額度切得更碎。
抓取预算能優化的是蜘蛛愿不愿意来、来了能走多遠,它不决定頁面是否被收錄,更不决定排名。把它当成整條鏈路上的前置环节来看待,预期會更接近實际。