列表頁是站内 URL 數量增長最快的地方。一個分類頁如果再带上分頁參數,很容易從几十個頁面扩成几千個。蜘蛛顺着「下一頁」一路走下去,看起来是件好事,實际上它往往走到某一頁就停了,而那一頁之後的内容,長期停在「已發現未抓取」的狀態里。
分頁為什么會吃掉抓取路径
分頁 URL 大多结构相似,頁面之間的差异主要是顺序不同,信息增量低,但每一個都要消耗一次請求。当抓取资源有限时,蜘蛛會把力气放在更有区分度的頁面上。于是你常看到:列表首頁抓得很勤,第二、三頁偶尔来一次,第五頁之後基本没有记錄。
這不一定是處罚,更接近资源分配的自然结果。真正需要留意的是,你希望被發現的詳情頁,是不是只挂在深處的分頁上。
三種常见的分頁结构,蜘蛛待遇不一样
只有「下一頁」的线性翻頁
蜘蛛必须一頁一頁走才能到達深處,路径長、代價高。第 20 頁的詳情頁,可能几周都等不到一次訪問。可以在列表頁顶部补少量關键頁碼,或者把大類拆成子分類,缩短從入口到詳情的距离。
頁碼全量铺開
首頁就把 1 到 100 頁的連結全部列出来,用戶看着方便,但每爬一次列表就要跟進上百個 URL,抓取节奏容易被拉散。更稳的做法是先给前若干頁連結,後面的用「下一頁」接力。
無限滚動與「加载更多」
如果翻頁只靠脚本請求接口、地址栏始终不變,蜘蛛通常拿不到新的 URL。至少要让每次翻頁對應一個可訪問的地址,或者單獨提供一個带分頁的备用入口。
顺带一提,早期用来串联分頁關系的 rel="next" 與 rel="prev" 提示,主流搜尋引擎已经不再作為抓取依據。別指望寫上這两個属性,深處頁面就會被顺利爬完,連結能不能点開、地址能不能直接訪問才是關键。
怎么判断蜘蛛停在了第几頁
- 在服務器日誌里筛出分頁地址,看訪問次數随頁碼递减的曲线在哪一頁断開。
- 對照後台「已發現未抓取」的列表,如果大量是深分頁下的詳情頁,問题多半出在路径太長。
- 同时看分頁頁面的响應時間,慢的分頁會让蜘蛛更早收手。
把分頁收紧的几種做法
- 限制可翻頁的深度,超過一定頁數後按時間或其他维度归档,而不是無限翻下去。
- 给詳情頁安排第二條進入路径,比如相關推荐、标簽聚合頁、站内搜尋结果的静態落地頁。
- 分頁頁面各自指向自身做規范化,避免不同排序參數被当成一批新 URL 反复抓取。
- 分頁連結用真實的 a 标簽,确保不执行脚本也能取到下一個地址。
- 發現某段分頁長期没有抓取记錄时,先补入口和缩短路径,再考虑其他手段。
分頁本身没有错,错的是让整站最重要的内容只能從分頁底部進入。把關键詳情頁至少安排一條浅路径,比反复催蜘蛛往下翻更有效。
小结
分頁既属于 URL 發現的一环,也是抓取预算最容易流失的一段。定期看一眼分頁序列的訪問分布,往往比盯着總量數字更有意义。当深處的頁面長期没有被抓,優先考虑缩短路径、增加入口,而不是單纯加快频率。