搜索抓取

抓取链路的分段核对:DNS、TLS、首字节与内容返回

蜘蛛抓取一个 URL 会经过 DNS、连接、TLS、首字节、内容返回和解析等多个阶段。本文把链路拆开,说明每个环节的常见表现、核对方法和记录建议,并说明内链与 Sitemap 在发现层中的作用,帮助定位抓取变慢或 URL 发现减少的原因。

搜索抓取

抓取链路的分段核对:DNS、TLS、首字节与内容返回

蜘蛛要抓到一个 URL,并不是“发出请求、收到页面”这么简单。从发现 URL 到真正拿到内容,中间会经过 DNS 解析、连接建立、TLS 握手、请求发送、首字节等待、内容传输和解析等多个环节。任何一个环节变慢或失败,都可能表现为“抓取少了”或“新 URL 迟迟不进来”。把链路拆开看,比只盯日志里的状态码更容易定位问题。

先分清“发现”和“抓取”

URL 发现发生在抓取之前。内链、Sitemap、RSS、接口输出等入口负责把 URL 放进待抓队列。发现之后,蜘蛛还要按调度策略决定什么时候访问。服务器稳定性、响应速度、错误率会影响调度器对站点的判断。因此,看到日志里 URL 变少时,先确认是发现入口出了问题,还是抓取链路被拖慢。

DNS 与连接建立阶段

第一个容易忽略的环节是 DNS 解析。如果解析超时、返回异常 IP,或者不同地区解析结果差异很大,蜘蛛可能还没发出 HTTP 请求就失败了。接着是 TCP 连接建立,防火墙、安全组、WAF 的限速策略都可能在这里拦截。

  • 核对 DNS 解析时间是否稳定,是否存在解析轮询异常。
  • 检查源站是否对陌生 IP 或高频 IP 做了连接限制。
  • 观察连接复用是否正常,避免每次请求都重新握手。

TLS 握手与首字节等待

HTTPS 站点还要额外关注 TLS 握手。证书链不完整、协议版本过旧、加密套件不兼容,都可能让部分抓取客户端直接放弃。握手完成后,服务器处理请求并返回第一个字节,这段时间叫首字节时间。首字节时间过长,常见原因是数据库慢查询、页面同步调用外部接口、缓存未命中或源站负载过高。

如果日志里大量出现超时,但服务器负载看起来正常,可以按地区、按 UA、按 URL 类型分组观察。有时只是某类动态页面拖慢了整体响应,并非全站故障。

内容返回与解析阶段

内容开始返回后,还要看传输是否被中断。响应体过大、压缩配置异常、连接提前关闭,都会让蜘蛛拿到不完整页面。若页面依赖 JavaScript 渲染,首次返回的 HTML 里可能只有空壳,链接提取会延后到二次渲染队列。此时内链结构是否清晰、关键链接是否出现在初始 HTML 中,会直接影响后续 URL 的发现效率。

抓取链路核对的目标不是追求单次请求最快,而是让发现、调度、返回三个阶段都尽量可预测。

内链与 Sitemap 在链路中的位置

内链和 Sitemap 属于发现层。内链决定蜘蛛能否顺着路径走到深页,Sitemap 则提供补充入口。两者不互相替代:内链反映站点结构,Sitemap 适合声明更新频繁或入口较深的 URL。如果服务器在抓取时频繁超时,再完整的 Sitemap 也可能被延后处理。因此,发现入口的核对要和服务器响应核对放在一起看。

  1. 先看首页和栏目页是否稳定返回,确认主路径可用。
  2. 再检查深页内链是否被正确输出,避免链接依赖交互才出现。
  3. 最后核对 Sitemap 是否可访问、格式是否正确、更新时间是否合理。

记录与排查建议

排查时不要只看一个指标。可以同时记录 DNS 耗时、连接耗时、TLS 耗时、首字节时间和总耗时。对比不同时段、不同 URL 类型,找出波动最大的那一段。若问题集中在连接或 TLS 阶段,优先查网络和证书;若集中在首字节,优先查应用性能和缓存;若集中在内容传输,优先查响应体大小和压缩配置。

蜘蛛池或站群场景下,多个站点共用服务器、IP 或域名时,更要注意资源竞争。单个站点响应变慢,可能只是同一台机器上其他站点占用了连接数或带宽。把服务器稳定性、URL 发现入口和内链结构分开核对,再合起来看,通常比反复提交 Sitemap 更有效。