抓取总量高不等于抓取效果好。把日志按小时切开之后,往往能看到某些时段的请求挤在一起、另一些时段几乎为零。这种分布直接决定了两件事:站点实际能承接多少抓取,以及抓取预算花在了哪些入口上。
为什么时段分布比总量更值得看
总量是一个汇总值,它掩盖了节律。同样是一天 20 万次蜘蛛请求,如果集中在三四个小时内,服务器要按峰值配置;如果均匀铺开,同样的总量对资源压力小得多。更重要的是,URL 发现是有顺序的——入口页、列表页、详情页依次被访问。当抓取集中在短时间内完成,深层 URL 往往被排到下一轮,回访间隔就被拉长。
读日志时间戳之前先统一三件事
- 时区:服务器日志多为 UTC 或本机时区,而抓取调度通常按另一个时区分布。不统一时区,会把凌晨低谷看成白天低谷。
- 粒度:按小时聚合足够看节律,按分钟聚合适合排查突发。同一份日志混用两种粒度,结论容易自相矛盾。
- 样本:至少取连续 7 天的完整日志,覆盖一次内容更新周期,避免把某次批量发布当成常态。
用一周样本估算可抓取容量
- 按小时统计每个蜘蛛 UA 的请求数,分离出真实搜索蜘蛛与仿冒流量。
- 剔除明显异常的小时:发布后回源高峰、压测、安全策略误拦造成的大量 403。
- 对剩余小时取中位数,乘以 24,得到平稳状态下的日请求数。
- 把这个数字与服务器可承受的峰值 QPS、带宽、数据库连接数对照,取其中最小的一项作为参考上限。
这里得到的是参考区间,不是承诺值。蜘蛛如何调度由对方决定,站点能做的是保证在这个区间内响应稳定,不出现大面积超时或 5xx。
波峰落在哪里,资源就要覆盖到哪里
如果波峰与站点的备份、批量任务、定时导出重合,响应时间会被拉长,蜘蛛可能下调抓取频次。把耗时任务挪开,或在波峰前预热缓存,比事后排查“为什么抓取变少”更直接。响应时间的波动本身,就是蜘蛛判断站点是否健康的信号之一。
容量不足时,先收入口,再谈扩容
- 确认 Sitemap 只包含需要被抓取的规范化 URL,去掉参数组合与已下线路径。
- 检查内链是否把大量入口指向低价值页面,例如筛选页、空结果页、重复列表。
- 核对 robots.txt 与页面 meta 是否一致,避免出现允许抓取但阻止索引的冲突声明。
- 在入口收敛之后,再评估是否需要提升服务器配置。
顺序反了会出现一种情况:容量扩了,但新增的抓取都落在重复或无效 URL 上,有效页面并没有更快被发现。
与 URL 发现的关联
抓取容量决定了每一轮能处理多少个 URL,也决定了新页面从产生链接到被访问的等待时间。入口页与列表页通常优先,深层详情页排在其后。因此提升站点被发现效率的常见做法,不是堆叠外链数量,而是缩短入口到目标的路径层级,让每一轮抓取能覆盖更多有效页面。
核对清单
- 日志时区是否统一,是否与调度时区对齐。
- 是否分离了真实蜘蛛与仿冒 UA。
- 是否存在与抓取波峰重合的高消耗任务。
- Sitemap、内链、robots 三处入口声明是否一致。
- 容量估算取的是瓶颈项,还是最宽松的一项。
时段分布是一种观测手段,用来判断资源是否被有效使用。它不会直接改变蜘蛛的抓取意愿,但能帮你发现资源被消耗在了哪些不该消耗的地方。