把目标页放进蜘蛛池之后,很多人只盯着一个问题:蜘蛛到底来了没有。但更基础的一层是,蜘蛛从入口页出发,要经过几次跳转才能摸到目标页。这个跳转次数就是链接深度,它直接决定了抓取能不能顺着链路传下去。
为什么深度会影响抓取传导
蜘蛛的爬行是有取舍的。越靠近入口、被链出次数越多的 URL,被重新访问的概率越高;每多一跳,抓取意愿和抓取配额都会被摊薄一点。这不是玄学,而是爬虫资源有限时的自然结果。
深度的损耗主要来自两处:一是每一次跳转都要重新解析页面、判断值不值得继续往下走;二是链路变长之后,中间任何一层出问题——超时、返回 5xx、被 noindex 拦住、JS 内容没渲染出来——后面的页面就直接断供了。链路越长,出问题的概率越高。
常见的三种深度结构
- 一层直达:入口页直接链出目标页。传导最短,适合目标页数量不多、希望尽快被发现的场景。
- 两层中转:入口页 → 分类或聚合页 → 目标页。多一层筛选,可以把不相关的爬取挡在外面,但中间层必须有实际内容支撑。
- 多层链路:入口页 → 列表页 → 详情页 → 目标页。链路最长、损耗最大,一般只在目标页量级很大、需要分批引导时才考虑。
隔几层比较合适
从实际操作看,入口页到目标页控制在 1 到 2 跳相对稳妥。超过 3 跳之后,越靠后的页面被爬到的概率下降会比较明显,尤其是中间层本身内容单薄的时候。
但深度也不是越浅越好。所有目标页都直连入口页,会带来另一个问题:单页链接数暴涨,每条链接分到的关注度被稀释;同时目标页与入口页的主题跨度变大,蜘蛛顺着走过去的意愿反而不高。深度和链接密度需要一起权衡。
怎么把深度控制在合理范围
- 先画出链路图。把入口页、中间层、目标页的指向关系列清楚,看清哪些目标页需要绕三四个弯才能到达。
- 统计每层的页面量。某一层如果堆了几万个 URL 却只有几十个入口指过去,这一层基本会被爬得很慢。
- 检查中间层的可抓性。状态码是否稳定、是否有意外拦截、主要内容是否依赖 JS 渲染,逐项确认后再谈深度。
- 用日志反查来源。看目标页的访问记录里 referer 落在哪一层,就能判断蜘蛛实际走的是哪条路径,而不是你以为的那条。
- 按结果调整。发现某条链路长期没有反馈,优先考虑缩短跳数,或者给中间层补上真正有价值的链接入口。
几个容易踩的误区
误区一:只要在入口页挂上链接,蜘蛛就一定会顺着走到最深处。实际上爬虫会在某一层停下,尤其是中间层看起来没什么可抓内容的时候。
误区二:为了压缩深度,把成百上千条链接全堆到入口页。结果每条链接能分到的权重更少,入口页本身也变得臃肿难解析,得不偿失。
误区三:只优化深度,不看中间层的质量。一条两跳的链路,如果中间层是空白页或者一堆重复内容,传导效果可能还不如一条结构清晰的三跳链路。
小结
链接深度不是越短越好,也不是越深越自然,关键是链路要通、每一层都有理由存在。把入口页到目标页的跳数控制在 1 到 2 跳、同时保证中间层可抓可取,通常比单纯堆链接更有效。上线之后别忘了用日志核对实际路径,蜘蛛走的路和你设计的路,往往不是同一条。