搜索抓取

抓取吞吐量核对:页面体积与首字节时间对单位时间抓取量的影响

抓取量的高低不只取决于蜘蛛给的抓取预算,也取决于服务器单位时间能交付多少页面。本文从 HTML 体积、首字节时间、连接与限速三个变量出发,给出用日志核对抓取吞吐的具体步骤,并列出常见误判情形与优化顺序。

搜索抓取

抓取吞吐量核对:页面体积与首字节时间对单位时间抓取量的影响

很多站点在核对抓取情况时,只看“昨天蜘蛛来了多少次”,却忽略了一个更基础的问题:在同样的抓取配额下,服务器实际能交付多少页面。抓取量从来不是一个固定数字,它由蜘蛛愿意花的时间和你服务器的交付速度共同决定。响应越慢、页面越大,单位时间内能抓完的 URL 就越少,未被抓取的队列就会越积越长。

抓取的本质是“时间分配”

搜索蜘蛛在单位时间内能发起的请求数是有上限的,这个上限受限于它对该站点的抓取预算、连接并发数以及你服务器的承载能力。可以把整个过程想成一条传送带:传送带的速度不是由蜘蛛单方面决定的,你的响应速度直接决定了它每分钟能拿走多少个页面。

因此,当我们讨论抓取量下降时,先别急着怀疑蜘蛛“不喜欢”新页面,先看看平均响应时间和单页体积是否发生了变化。

三个最容易被忽略的变量

1. HTML 体积与压缩

一个 300KB 的 HTML 和一个 80KB 的 HTML,在网络传输和解压环节花费的时间差距是实实在在的。常见问题包括:把大段 JSON 数据直接内联到页面里、模板重复输出冗余的 class 与 data 属性、未开启 gzip 或 brotli 压缩。建议对主要模板做一次体积审计,看看是否有可以直接删掉的隐藏字段。

2. 首字节时间(TTFB)

TTFB 反映的是服务器从收到请求到吐出第一个字节的时间,它包含数据库查询、缓存命中、后端渲染等环节。TTFB 从 200ms 变成 1s,对单个用户可能只是“稍慢”,但对蜘蛛而言意味着单位时间能抓的页面数可能减少一半以上。未命中缓存的分类页、需要实时统计的详情页、缺少索引的查询,都是 TTFB 的常见拖累项。

3. 连接与限速策略

有些站点为了“保护服务器”,在前端网关层对蜘蛛做了较激进的限速,结果每次请求都要重新建立连接,反而拖慢了整体吞吐。限速本身没错,但应基于真实负载数据设定,而不是拍脑袋给一个很小的并发值。

如何用日志核对吞吐能力

不需要复杂的工具,把蜘蛛请求日志按小时切分,就能看到大致趋势:

  1. 统计每个小时蜘蛛的请求总数,剔除 4xx、5xx 后的成功请求数。
  2. 计算响应时间的分布,重点看 P90、P95,而不是平均值——平均值常被少量快速静态请求拉低。
  3. 统计成功响应的总字节数与平均单页字节数,观察是否在某次改版后明显上升。
  4. 把“成功请求数 / 小时”与“平均响应时间”画在同一张图上,看两者是否呈明显的反向关系。
  5. 对比不同目录:如果某个栏目抓取量长期偏低,但响应时间正常,那问题可能出在入口结构而非性能。

常见误判

  • 把 5xx 当成唯一问题:大量 200 但响应很慢的请求,同样在消耗抓取时间。
  • 只看总请求数:总请求数上涨可能只是 404 或参数页变多,有效抓取并未增加。
  • 忽略缓存命中率:蜘蛛访问的往往是被缓存过的页面,若缓存频繁失效,性能数据会失真。
  • 用压测结果代替真实日志:压测环境没有真实的蜘蛛访问模式,参考价值有限。
抓取量的天花板,往往不是蜘蛛给的配额,而是你自己的响应速度。

优化顺序建议

如果确认是交付速度拖累了抓取,建议按“先降低单页成本,再提升并发能力”的顺序处理:先做 HTML 体积削减与静态资源清理,再检查缓存策略与数据库慢查询,最后才考虑调整并发与限速参数。改动前后各留一段日志做对比,避免把波动误判成优化效果。

另外,性能改善不会立刻转化为抓取量提升,通常需要观察数天到数周,因为蜘蛛的抓取节奏存在惯性。保持服务器稳定、响应一致,比短期内的爆发式加速更有意义。