很多人查抓取问题,习惯从页面内容、状态码、内链看起,但蜘蛛真正遇到的第一道关,往往发生在 HTML 之前:域名解析、TCP 连接、TLS 握手。这几步出了问题,日志里可能只是一片空白,连一次访问记录都留不下。
DNS:抓取链路上最容易被忽略的第一跳
蜘蛛要抓 https://example.com/a,第一步是把域名解析成 IP。这一步的开销取决于解析服务商、TTL 和线路。如果解析响应长期在几百毫秒以上,或者偶尔超时,抓取就会表现为时快时慢、部分页面始终抓不到。
- TTL 设置过短,解析被反复请求,容易受解析服务商抖动影响;TTL 过长,切换 IP 或迁移时生效太慢。
- 多地解析到不同节点时,要确认每个节点都能正常响应蜘蛛请求,而不是只有主力线路可用。
- 解析记录里存在失效 IP,或者 CNAME 链拉得太长,都会拖慢甚至中断连接。
排查时可以在服务器上直接 dig 域名,看返回的 IP 是否与预期一致、响应时间是否稳定。
TLS 与连接复用:握手失败等于页面不存在
HTTPS 站点建立连接时要完成 TLS 握手。证书链不完整、中间证书缺失、SNI 配置不对、只支持过老的协议版本,都可能让蜘蛛在握手阶段就断开。这类问题在自己浏览器里往往看不出来,因为浏览器会做缓存和补全,而蜘蛛基本每次都从零开始。
几个常见的坑
- 证书链不完整:浏览器能自动补,蜘蛛不一定。
- 证书域名与实际访问域名不匹配,比如 www 与裸域共用一张不覆盖两者的证书。
- 只开 IPv6 或只开 IPv4,导致部分网络环境的蜘蛛连不上。
- 强制跳转 HTTPS 但证书尚未生效,形成连接层面的循环。
用在线工具检查证书链,并确认 www、裸域、协议版本都能正常握手,比事后猜测更有用。
服务器稳定性:不是快,而是稳
抓取对服务器的要求不是峰值多快,而是响应是否可预期。同一批 URL,如果响应时间在 100ms 到 3 秒之间来回跳,蜘蛛通常会降低抓取频率,URL 的发现和回访都会跟着变慢。
- 带宽与并发:蜘蛛的请求会集中在短时间内到达,限速策略要留出余量。
- WAF 与防火墙:验证码、JS 挑战、按 UA 拦截,都会让蜘蛛拿不到内容,而且常常留下 403 而不是 5xx,容易被误判成权限问题。
- 后端接口慢:页面本身不大,但首字节时间很长,实际效果和超时差不多。
先确认服务器“对谁都稳”,再谈蜘蛛为什么抓得少。站点监控看到的和蜘蛛看到的,往往是同一件事的两个视角。
一条可执行的排查顺序
- 从服务器直接请求几个关键 URL,记录解析耗时、连接耗时和首字节时间。
- 检查证书链、SNI 与协议版本,确认 www 和裸域都正常。
- 对同一 URL 连续请求多次,观察响应时间波动和错误出现的规律。
- 确认是否有 WAF、限流或地域规则命中蜘蛛。
- 把结果与访问日志对照,看蜘蛛请求是被正常记录,还是在连接层就被断开。
抓取问题从下往上看,常常比从上往下看更快定位:先保证域名能解析、连接能建立、服务器能稳定回应,再去谈 Sitemap、内链结构和内容质量。