蜘蛛进站抓取时,并不是每个 URL 都能顺利拿到内容。遇到响应慢的地址,它不会一直等下去,而是按自己的超时和重试规则处理。理解这套规则,能解释不少「页面明明在线,却迟迟没被抓」的现象。
抓取请求有明确的时间上限
蜘蛛发起的每次请求,都带着一个等待上限。常见的时间节点大致分两段:
- 连接阶段:TCP 握手、TLS 协商如果长时间没有回应,请求会被直接判为失败。
- 响应阶段:连上之后服务器迟迟不给首字节,或者内容传到一半卡住,同样会触发超时。
这两段里任何一段超时,本次抓取基本就算失败。蜘蛛拿不到内容,也就无从解析页面里的链接,这条路径在这一轮就断在这里。
超时之后,蜘蛛通常会做什么
第一次失败并不等于放弃。常见的处理顺序大致如下:
- 同一次抓取内做有限次数的重试,间隔通常较短。
- 如果连续几次都失败,把这个 URL 暂时标记为「不稳定」。
- 降低该目录或该主机下 URL 的访问频率,把额度挪给响应正常的地址。
- 过一段时间再试探性回访,确认是偶发问题还是持续故障。
所以一次短时抖动影响有限,但如果某个目录长期慢,蜘蛛会整体降低对它的兴趣。这不是惩罚,只是把有限资源用在能拿到内容的地方。
哪些表现容易被判成「慢」
- 首字节时间高:慢查询、接口串行调用、模板渲染阻塞都会推高 TTFB。
- 偶发 5xx:负载高时偶尔报错,往往比稳定返回错误更容易招来反复重试。
- 内容截断:响应头写了完整长度,实际传输中断,蜘蛛可能只拿到半截页面。
- 限速与拦截:返回 429 或挑战页,蜘蛛看到的是「不可用」,而不是内容。
慢 URL 会拖累整条抓取路径
蜘蛛的抓取是有节奏的,一个慢请求会占用它对某个主机的并发额度。当列表页、频道页这类入口变慢时,从它们出发能被发现的新 URL 数量会同步下降。表面上看只是几个页面慢,实际影响的是下游一整片路径的发现速度。
可以自查的几个点
- 用日志或抓取工具统计蜘蛛请求的响应时间分布,重点看 P95、P99,而不是平均值。
- 确认超时是集中在少数模板,还是全站性。
- 检查服务器日志里 5xx、429、连接中断的出现频率与时间段。
- 对确实耗时的接口类页面,考虑静态化或缓存兜底,让蜘蛛至少能拿到可解析的 HTML。
- 把重要入口页从重负载逻辑里拆出来,别让列表页等着接口返回。
蜘蛛的耐心是有限资源。响应时间每降一档,同样的抓取额度就能多走几条路径。
小结
超时与重试是抓取环节里最容易被忽略的一环。页面能打开不代表蜘蛛能顺利抓到;把响应时间、错误率和连接稳定性控制住,URL 发现和内链路径的推进才有基础。