搜索抓取

分页与“查看全部”:蜘蛛在列表页里会翻多深

列表页翻页链接是 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 中、地址足够稳定、数量不要失控,就已经比大多数站点做得更好。

小结

列表页的翻页链接是很实在的一个入口。蜘蛛最终翻到第几页,更多是抓取资源分配的结果,不必强求。运营侧能做的,是把链接写清楚、把地址收干净、把低价值页面控制住,剩下的交给时间。