抓取是有配額的,不是想抓多少就抓多少
搜尋引擎给每個站点分配的抓取量是動態的,跟站点規模、更新频率、内容质量有關,也跟服務器响應速度直接相關。同一台服務器,响應越快,單位時間内能完成的請求越多,蜘蛛愿意给的抓取配額通常也越高;反過来,如果入口頁每次都要好几秒才返回,甚至频繁超时,蜘蛛會主動放慢节奏。
這件事對蜘蛛池類结构影响尤其明顯:入口頁是發現目标 URL 的入口,入口頁抓得慢,後面的目标 URL 就排不上队。
响應變慢时,日誌里通常能看到的几種表現
- 單次抓取總量下降:同一時間段里,蜘蛛請求數比以前少了一截,但站点並没有大規模下线。
- 抓取間隔被拉長:同一個入口頁,之前几分钟来一次,現在變成几十分钟甚至几小时一次。
- 抓取集中在少數頁面:蜘蛛把有限的配額都花在几個响應快的 URL 上,响應慢的入口頁長期不被訪問。
- 超时重试消耗配額:請求超时後蜘蛛可能會重试,重试本身也占額度,實际有效抓取更少。
- 新 URL 發現變慢:入口頁里的目标連結不是没被识別,而是排队排很久。
怎么判断是不是速度問题
- 從訪問日誌里取蜘蛛請求的响應耗时字段,按小时統計平均值和 P95,而不是只看平均。
- 對比抓取量下滑的時間点和服務器监控(CPU、資料库、带宽)是否吻合。
- 抽查几個被抓得最少的入口頁,用 curl 或浏览器開發者工具看 TTFB,確認是服務端慢還是網絡抖動。
- 排除其他原因:robots.txt 是否改動、入口頁是否返回了非 200 狀態、目标 URL 是否大量 404。
優先做的几件事
- 减少入口頁的實时計算:能缓存的列表、能静態化的部分尽量缓存,把 TTFB 压到几百毫秒以内。
- 控制入口頁數量:入口頁越多,每個頁面分到的抓取次數越少。與其铺几千個几乎一样的入口頁,不如把有内容、有差异的留下。
- 减少不必要的跳轉和重定向:每一跳都是一次額外請求,鏈路越長越容易超时。
- 把重要連結放在前面、數量控制在合理范围,让一次抓取能覆盖更多有效目标。
- 错峰處理:如果入口頁是動態生成的,避免在同一秒内响應大量請求,必要时做限流而不是直接超时。
不建议為了“让蜘蛛多抓”而频繁改動站点结构、临时放開限流或堆叠重复入口頁。抓取量是结果,不是可以直接拉高的開關。
一個容易忽略的点:慢不等于不抓
响應慢的站点不會被立刻放弃,蜘蛛會降低频率繼續观察,所以你會看到“還在抓,但抓得很少”的狀態。這種狀態下最容易做错的判断,是把問题归到入口頁寫法不對上,反复改連結形式、改 URL 參數,反而忽略了服務端本身。先確認响應耗时,再谈入口頁结构,顺序不要反。
落脚到可执行的動作:盯住日誌里的响應耗时和抓取總量這两條线,先解决服務端慢,再检查入口頁的連結结构。两件事分開看,判断會清楚很多。