抓取量下滑时,很多人先去看 robots、Sitemap、内链结构,却忽略了一个更基础的因素:服务器回得够不够快。蜘蛛是按时间预算工作的访客,响应时间一旦变长,它不会等你,而是把抓取配额挪到别处去。
响应时间为什么直接影响抓取量
蜘蛛单位时间里能发起的请求是有限的。同样十分钟,每个页面 200 毫秒能抓几百个,每个页面 3 秒就只能抓几十个。所以响应时间不只是性能问题,它直接决定了被抓走的 URL 数量。
更关键的是排队机制。同一时间可能只有少量并发连接在抓你的站,单个请求变慢,连接就被占住,后面的 URL 只能干等。慢的不是一个页面,而是整条队列。
蜘蛛大概会等多久
- 几百毫秒到两秒内返回,抓取节奏通常看不出明显变化;
- 连续超过数秒,抓取频次往往开始下滑,尤其是短时间内反复出现时;
- 达到超时阈值,请求被放弃,日志里可能只留下一条中断记录,或者干脆什么都没有。
具体阈值各家爬虫不同,也会随站点历史表现浮动:一直稳定的站,偶尔慢一次影响有限;长期偏慢的站,会被整体降速,恢复也需要时间。
慢在哪里,要拆开看
日志里只有一个总耗时,但成因通常分几层:
- 网络与 TLS:握手慢、回源远,CDN 未命中时最明显;
- 后端处理:数据库慢查询,或者模板里同步调用了第三方接口;
- 动态渲染:每次访问都现算的页面,抓得越多越慢。
建议按分位值判断,而不是只看平均值。P50 正常、P95 很慢,说明是少量 URL 拖累了整体,定位范围会小很多。
超时、5xx 和 429 不是一回事
三者都会影响抓取,但作用路径不同,处理方式也不同:
- 超时:蜘蛛拿不到响应,通常会降低对本站的抓取频率,等站点恢复后再逐步试探;
- 5xx:被理解为服务器端故障,连续出现时降速更明显,恢复正常抓取的时间也更长;
- 429:是明确的“慢一点”信号,配合 Retry-After 使用,可以主动把抓取压到服务器能承受的范围,比硬撑到超时要好。
不过 429 用过头也会把蜘蛛劝退。长期只返回 429 的目录,可能被逐渐忽略,甚至在一段时间内不再被排入队列。
优化顺序:先省掉不必要的工作
- 让蜘蛛也走缓存,静态页和列表页尽量命中 CDN 或页面缓存;
- 减少首屏依赖的外部请求,特别是同步调用的第三方接口;
- 把重查询和复杂模板改写或预生成,不要让每次抓取都触发一遍;
- 检查页面在抓取时是否触发了写操作,比如计数、写日志、实时推荐计算。
调完后看哪些指标
至少对比这几项:抓取频次、平均与 P95 响应时间、超时和 5xx 占比、单次抓取的平均字节数。如果响应时间已经降下来,抓取量却没涨,那就该回头查抓取路径、内链结构和内容本身的价值,别把所有问题都归到速度上。
把响应时间压下来,是提高抓取量的必要条件,而不是充分条件。页面值不值得抓,最终仍由内容和结构决定。