这个坑值得记一笔。列表页改成无限滚动,每次向下滚追加 40 条,日志里蜘蛛只抓到前两批,第三批开始一条请求都没有。
刚开始盯着「接口返回的下一页游标依赖上一次请求的响应」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。滚动由 IntersectionObserver 触发,蜘蛛不产生滚动事件;追加的内容没有独立 URL,也没有可点击的分页入口;首屏只渲染 40 条,其余数据在客户端拼装。
上来先确认页面里是否存在可抓取的分页链接
curl -s https://www.example.com/list/ | grep -c 'rel="next"'
补一组指向各页的静态链接
<a href="/list/page/2/" rel="next">下一页</a>
给每批数据生成独立可访问地址
curl -sI https://www.example.com/list/page/2/ | head -1
别只看报错消失,验证要多做一步。补上分页链接后,蜘蛛开始沿着链接逐页抓取,列表页的收录在两周内覆盖到第 50 页。
提醒一点。滚动加载只能服务用户,不能替代可遍历的链接结构,分页入口是蜘蛛往深处走的唯一路径。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
