搜索抓取

抓取并发与站点限速:同一时间放多少搜索蜘蛛进来比较合适

搜索蜘蛛的抓取是并发发起的,站点能承接多少并发,会直接影响抓取队列推进的速度和新 URL 被真正抓取的快慢。这篇文章讲怎么从日志里观察并发、判断站点承压能力,以及用服务器和 CDN 做限速的具体做法,避开限速过严把 URL 发现拖慢的坑。

搜索抓取

抓取并发与站点限速:同一时间放多少搜索蜘蛛进来比较合适

搜索蜘蛛的抓取不是一条一条排队来的,它会在同一时间发起多个尚未返回的请求。站点能承接多少这样的并发,会直接影响抓取队列推进的快慢,也间接影响一条新 URL 从被内链或 Sitemap 暴露,到真正被抓取之间的间隔。这篇把重点放在并发和限速这一层,讲怎么观察、怎么判断、怎么设置。

并发指的是什么

同一时刻,来自同一只搜索蜘蛛的、还没有返回结果的请求数量,就是当下的并发。抓取线程数、请求间隔、单次抓取的响应耗时,都会影响它。

日志里看到的是一串时间戳。按秒把同一 User-Agent 的请求聚合起来,就能粗略看出某一秒内同时有多少条请求在跑;按分钟看,则能得到一个更平稳的峰值曲线。

并发不是越高越好

静态页面加缓存,几十并发的压力通常可以轻松消化;如果每个页面都要查数据库、渲染模板、调用外部接口,并发升高会先把数据库连接占满,响应时间被拉长,接着开始出现 5xx 或超时。

搜索蜘蛛遇到明显的慢响应和错误,一般会降低抓取速率,把这条 URL 放回队列稍后再试。表面上看是站点保护了自己,代价是这条 URL 的抓取被往后推,新页面的曝光也会跟着延后。

从日志里看三件事

  • 每秒请求数峰值:按分钟聚合同一 User-Agent 的请求数,看峰值落在什么时段,是否和站点自身的流量高峰撞在一起。
  • 响应时长分布:把 200 响应按耗时分成几段,关注慢请求占多大比例。慢请求多,往往说明瓶颈在后端接口或数据库,而不是带宽。
  • 状态码构成:5xx、429、499 以及超时占比如果持续偏高,基本可以判断站点在抓取并发上已经吃紧。

限速的几种做法

  1. 服务器层限速:Nginx 的 limit_req、limit_conn 可以按 IP 或 User-Agent 限制速率与并发连接数,超出的请求返回 429 或 503。
  2. CDN 与 WAF:多数 CDN 支持按 UA、路径配置速率规则,可以在边缘挡掉异常高频请求,减少回源。
  3. 缓存优先:把不常变动的页面放进反向代理或 CDN 缓存,让蜘蛛拿到的大多是缓存命中,回源压力自然下降。
  4. 临时降速:做数据迁移、批量任务时可以短时间收紧限速,但要留一个明确的恢复时间,不要长期挂着 503。

需要提醒的一点是,robots.txt 里的 crawl-delay 各家支持情况并不统一,Google 已经明确不采用这一指令。真正可控的限速点,还是在服务器和 CDN 这一层。

如果日志里 429 和 503 的比例长期偏高,先别急着调低限速值,先确认是站点本身变慢了,还是确实有异常高频请求在挤占配额。

限速过严会拖慢什么

限速过严时,日志里会出现大量 429、503,搜索蜘蛛会拉长重试间隔。新 URL 即使已经被 Sitemap 或内链暴露,也只能在队列里排队等待。表现就是:Sitemap 提交了、内链也加了,但在抓取记录里迟迟看不到这条 URL 出现。

并发有限时,让重要 URL 先走

  • Sitemap 只放规范 URL 和确实需要被发现的页面,减少无效排队。
  • 把重要页面放在较浅的内链层级里,让它们更早进入抓取队列。
  • 用 robots 规则或参数规范化挡掉筛选、排序类低价值 URL,别让它们占用抓取名额。

每周复核一次

  • 抓取峰值时段是否和站点自身流量高峰错开。
  • 同一秒内来自搜索蜘蛛的请求数,是否明显超过当日平均。
  • 5xx、429 的比例有没有抬升。
  • Sitemap 里的 URL 在日志中的出现比例是否稳定。

并发和限速不是设置一次就不用再管的事情。站点在改版、缓存策略在调整、抓取量本身也会波动,隔一段时间用日志复核一遍,比长期套用一个固定数值更可靠。