蜘蛛抓取一个站点,本质上是一连串 HTTP 请求串起来的路径:首页到列表页,列表页到详情页,中间可能还夹着分页、筛选参数和静态资源。这条路径能不能走完,不只取决于链接有没有写对,还取决于每一步的服务器响应稳不稳。链接结构再漂亮,响应一慢,路径照样会从中途断掉。
一次抓取失败,断的是整条线
蜘蛛不是先规划好完整路线再出发,而是走到哪算哪。当前页面请求成功,它才会解析出链接、把新 URL 放进队列。如果某一步拿到超时、连接被重置或者 5xx,这一跳之后的链接就都不会被发现,只能等下次重访。
所以路径上的每个节点都接近于单点:断在列表页,后面所有详情页一起消失;断在分页第二页,后面的列表就全看不到了。
服务器变慢时,蜘蛛会怎么调整
- 先降速:响应时间拉长,抓取速率会跟着压下来,单位时间能走完的路径变短。
- 再重试:5xx 和超时通常会被安排重试,重试次数与间隔由搜索引擎决定,站点很难干预。
- 然后收缩:持续表现不稳定的目录或参数,抓取优先级容易被下调。
- 最后是路径整体变窄:原本能走到第四层的,可能停在第二层就折返。
这个过程通常是渐进的,不会一次跳变,所以很容易被忽略,直到某天发现新页面收录明显变慢,才回头查服务器。
同样慢的情况下,哪一截最先断
超时阈值对所有 URL 大致相同,但不同页面熬过阈值的能力差别很大:
- 动态参数页:带筛选、排序参数的 URL 往往响应最慢,最先被放弃。
- 深层页面:路径本来就长,优先级靠后,抓取频率低,失败后拿到重试的机会也少。
- 分页尾部:第三页往后本来就少被抓,一抖动更容易彻底掉队。
- 大文件与图片:单个请求耗时长,会挤占同一时间段内的抓取额度。
站点侧能做的几件事
- 把关键路径上的页面响应压到几百毫秒内,TTFB 是最该先看的指标。
- 给列表页、分页和热门详情页加缓存,避免每次抓取都打到数据库。
- 避免整站同时变慢:慢查询、定时任务、备份尽量错开抓取高峰。
- 确实要临时下线,用 503 并带上 Retry-After 响应头,比直接 200 返回一个空页面更清楚。
限流要按来源区分
站点的防护策略如果对所有来源一视同仁,蜘蛛很容易被误伤,表现为间歇性的连接被拒或响应极慢。给已知的搜索引擎来源保留稳定的响应通道,比事后逐个加白名单更省事。
怎么确认问题出在服务器而不是链接
两件事可以对照着看:一是日志里搜索引擎来源的响应码分布,5xx 与超时的占比是否在上升;二是这些失败请求集中在哪些目录、哪些参数上。如果失败集中在动态参数页,多半是服务器侧的问题;如果失败集中在某一层级的静态页面,优先回头检查内链和路径设计。
抓取路径不是画在纸上的图,而是一次次真实请求跑出来的结果。服务器稳不稳,直接决定了这张图能画多深。