搜索抓取

抓取路径的连贯性:从入口页到目标页,中间断了会怎样

蜘蛛抓取可以看成一条从入口页到目标页的路径,任何一段断开,后面的 URL 可能长期不被发现。本文按发现、请求、解析、入队、回访的顺序拆解常见断点,并给出一份可落地的巡检清单。

搜索抓取

抓取路径的连贯性:从入口页到目标页,中间断了会怎样

蜘蛛抓取一个页面,很少是孤立的一次请求。它更像一条路径:蜘蛛从某个入口发现 URL,顺着链接或 Sitemap 走到目标页,再把页面里的链接解析成新的候选地址。这条路径上任何一段断开,后面的页面就可能一直待在队列外面。下面按路径的顺序,拆一下常见的断点。

一条抓取路径由哪几段组成

  • 发现:蜘蛛从外链、Sitemap、站内链接或提交入口拿到一个 URL。
  • 请求:向服务器发起请求,经过 DNS、连接、TLS,拿到响应。
  • 解析:读取 HTML,提取出可以继续跟进的链接。
  • 入队:把新发现的 URL 放进待抓取队列,等待调度。
  • 回访:根据更新节奏再次请求,确认内容是否发生变化。

排查时不必一次看全,先确认断在哪一段,再往下查会更省时间。

断点一:入口页没有有效抓到

如果入口页本身抓不到,后面的页面基本不会被发现。常见情况是入口页返回 4xx 或 5xx,或者需要用参数、Cookie、登录态才能打开。另一种情况是入口页被 robots.txt 屏蔽:此时蜘蛛不会抓取该页内容,页面上写着的链接也就读不到。需要注意的是,外部指向被屏蔽 URL 的链接仍然能让蜘蛛知道这个地址存在,但它无法通过这个页面继续向内走。

断点二:链接存在但触发不到

有些入口写在 JS 里,需要点击、滚动或接口请求才生成。蜘蛛在渲染环节可能执行不到这一步,看到的就是一个空壳。表单提交、下拉筛选、需要悬停才出现的菜单也属于这类。如果希望这些入口被走到,最好在初始 HTML 里就给出可点击的 a 标签,并保证 href 是真实地址,而不是 javascript 伪协议或 onclick 事件。

断点三:链接可达但响应拖慢了路径

跳转层级过多会让蜘蛛在中间页消耗请求。301 一层接一层,或者 http 到 https、带 www 到不带 www 反复跳,都会让同一批 URL 的抓取效率下降。服务器返回 5xx 或长时间不响应时,蜘蛛通常不会一直等,会降低对这台服务器的请求频率,恢复后再逐步提速。也就是说,稳定性问题不只影响当下这次抓取,还会影响接下来一段时间的抓取节奏。

断点四:到了页面,链接被指令截断

链接上加了 nofollow,蜘蛛通常不会沿着它继续发现新地址;页面级 meta robots 设为 noindex 时,页面仍可能被抓取,但不会进入索引,之后的回访频率也容易下降。这两类指令不等于路径立刻消失,但会让路径的延伸价值变小。

断点五:抓到页面却解析不出新链接

内容放在 iframe 里、链接需要登录才能看到、正文由接口异步填充,都会让解析环节拿不到可用的链接。这种页面在日志里看是 200,但抓取范围并不会因此扩大。

一份实用的巡检清单

  1. 取最近一段时间的服务器日志,筛出蜘蛛的请求,看哪些目录只有入口请求、没有后续请求。
  2. 抽样几条路径,手动从首页点到目标页,记录中间经过的跳转和状态码。
  3. 检查入口页是否依赖 JS 交互,确认初始 HTML 中是否有可用的 a 标签。
  4. 核对 Sitemap 里的 URL 是否都能返回 200,以及是否和站内链接指向同一地址形式。
  5. 观察重要页面的回访间隔,判断是抓取频率问题,还是路径本身走不通。
抓取路径的连贯性,往往比单点优化更容易见效。先把一条从入口到目标页的链路打通,再考虑扩大抓取范围。