搜尋抓取

分頁與“查看全部”:蜘蛛在列表頁里會翻多深

列表頁翻頁連結是 URL 發現的重要来源,但蜘蛛並不点击按钮、也不滚動頁面,它只讀 HTML。本文讲清數字分頁、“下一頁”、“查看全部”和無限滚動几種寫法對 URL 發現的實际影响,並整理几個常见誤区和可落地的做法。

搜尋抓取

分頁與“查看全部”:蜘蛛在列表頁里會翻多深

做站点运营时,列表頁往往是最容易被忽略的 URL 来源。首頁、栏目頁、詳情頁之間的連結通常有人管,但翻頁連結怎么放、放几個,很多人是随手一设。而蜘蛛的 URL 發現,很大一部分恰恰發生在這些翻頁連結上。

蜘蛛在列表頁里看到的是什么

蜘蛛抓到一個列表頁後,會把 HTML 中出現的連結提取出来,排進待抓取队列。它不會“点击下一頁按钮”,也不會滚動頁面,只是讀服務端返回的 HTML。所以能不能翻到第二頁、第三頁,取决于第一頁的 HTML 里有没有真正指向那些頁面的 a 标簽。

由此可以得出一個很直观的结论:翻頁連結最好是可以直接解析的普通連結,落在 href 里,而不是靠脚本拼接、或包在一個 button 元素上。

几種常见的翻頁寫法

  • 數字分頁:1、2、3……再加一個“下一頁”,連結直接可讀,蜘蛛能顺着走,运营侧也容易判断目前在第几頁。
  • 只有“下一頁”:能线性推進,但需要一层层爬,翻到第 20 頁的成本並不低。
  • “查看全部”頁面:把整列表铺在一個長頁面上。優点是連結集中,一次抓取能發現更多 URL;缺点是頁面体积大、响應慢,容易拉長單次抓取時間。
  • 無限滚動或“加载更多”:如果新内容全靠脚本追加,又没有對應的可抓取地址,那么第二屏之後的内容對蜘蛛来说基本不存在。

抓取深度本身是有限度的

蜘蛛不會無休止地翻頁。翻頁越深,連結在队列里的優先級通常越低,被安排到後面的可能性越大。一個列表有 500 頁,真正被稳定抓取的往往只是前面若干頁。這不是惩罚,只是抓取资源在不同 URL 之間的自然分配。

所以與其纠结“蜘蛛為什么没翻到第 300 頁”,不如先想想這批 URL 值不值得被翻到那里。如果第 300 頁之後是大量低差异内容,没被翻到未必是坏事。

几個容易踩的坑

  • 用 nofollow 挡翻頁連結。它挡住的通常只是連結的传递属性,而 URL 是否被發現、是否進入抓取队列,並不完全同步,结果是没省下多少抓取,反而让新内容發現變慢。
  • 翻頁地址用同一批參數来回變,比如 sort、view、page 混着用,产出大量内容几乎相同的 URL。
  • 翻頁連結指向的頁面返回 200,但實际是空列表或重复列表,蜘蛛反复来、反复拿不到新東西。
  • 把翻頁做成纯脚本路由,地址變了,服務端返回的 HTML 里却没有對應連結。

可以落地的几件事

  1. 保證每頁都有指向下一頁的普通 a 标簽,翻頁連結不要藏在脚本里。
  2. 列表頁给出足够但不過量的翻頁入口,數字分頁配合“下一頁”通常就够用。
  3. 内容量不大时,可以考虑“查看全部”来减少层級;内容量很大时,反而要控制它的范围。
  4. 给翻頁 URL 一個稳定的形式,避免同一批内容出現多個地址。
  5. 定期看抓取日誌中翻頁 URL 的抓取比例,判断翻頁路径是否真的被走到。
翻頁連結只是 URL 發現鏈條中的一环。它不需要多复杂的设計,只要連結真實存在于 HTML 中、地址足够稳定、數量不要失控,就已经比大多數站点做得更好。

小结

列表頁的翻頁連結是很實在的一個入口。蜘蛛最终翻到第几頁,更多是抓取资源分配的结果,不必强求。运营侧能做的,是把連結寫清楚、把地址收干净、把低價值頁面控制住,剩下的交给時間。