- 自动会话管理
- 锁定 195 个国家/地区的任意城市
- 无限并发会话
爬取深度
简而言之:爬取深度是种子 URL 与某个页面之间经过的链接跳转次数。设置深度限制后,爬虫就不会爬取距起点超过指定点击次数的页面。
爬取深度衡量的是链接距离,而不是目录层级。种子 URL 的深度为 0;从种子 URL 直接链接到的页面深度为 1;从这些页面链接到的页面深度为 2,以此类推。如果首页直接链接到 /a/b/c/d/product,该页面的深度可能只有 1;而 /product 即使路径很短,如果只能经过很长的导航链才能到达,其深度也可能达到 6。
为什么需要深度限制:
- 确保任务结束:如果不设置限制,爬虫在大型网站或动态生成的网站上持续跟随链接,可能永远无法完成任务。
- 控制成本:页面数量会随深度呈几何级数增长,无限深度的爬取可能意外耗尽全部预算。
- 保持相关性:距离种子 URL 越远的页面,通常与爬取目标的相关性越低。
- 避免陷阱:日历、分面筛选器和会话 URL 可能生成无限延伸的链接链,只有深度限制或爬取范围规则才能阻止爬虫继续深入。
页面数量如何增长:
| 深度 | 该层级的页面数 | 累计页面数 |
|---|---|---|
| 0(种子) | 1 | 1 |
| 1 | 50 | 51 |
| 2 | 2,500 | 2,551 |
| 3 | 125,000 | 127,551 |
| 4 | 6,250,000 | 6,377,551 |
以上数字假设每个页面都有 50 个新链接,且没有重复链接。在实际爬取中,去重会排除重复的导航链接,因此页面数量增长通常较慢。但总体规律不变:每增加一个深度层级,爬取规模就可能扩大 10 倍甚至 100 倍。将深度限制从 3 提高到 4,绝不是微小的调整。
如何选择深度限制:
合适的限制取决于目标内容距离种子 URL 有多远。这由网站结构决定,并不存在适用于所有网站的统一数值。
结构清晰的文档网站通常可以从目录出发,经过两到三次链接跳转到达所有页面。电商目录中的商品页面一般距离品类列表 2 层,距离首页 4 至 5 层。新闻归档则可能需要翻阅多层分页才能找到较早的内容。
实用的方法是先进行一次浅层测试爬取,记录目标页面首次出现的深度,再将正式任务的深度限制设为比该深度多一层。如果未经测量就随意设定数值,往往会导致遗漏内容,或为不需要的页面付费。
深度与种子 URL 策略:
深度限制和种子 URL 的选择,是从两个方向看待同一个问题。选对种子 URL,就能降低所需的爬取深度。
以首页为种子并将深度设为 5,可能与以品类 URL 为种子并将深度设为 2 到达相同的商品页面,但前一种设置会额外爬取大量无关页面。如果网站提供站点地图,以其中的 URL 作为种子,就能直接提供所有目标 URL,将所需深度降至 0 或 1。
深度配置示例:
{
"seeds": ["https://example.com/category/laptops"],
"max_depth": 2,
"depth_rules": {
"/product/*": 3,
"/reviews/*": 1
}
}
默认情况下,全局深度限制为 2;商品路径允许额外深入一层,以抓取商品变体;评论路径则受到更严格的限制。按路径模式分别设置深度规则,可以避免为了爬取某个区块而提高全局限制,进而从其他区块引入大量不需要的页面。
深度与广度:
深度限制还会受到遍历顺序的影响。广度优先爬虫会先完成当前深度层级,再进入下一层,因此即使任务提前停止,也能完整覆盖较浅的层级。深度优先爬虫则会立即沿一条路径向下,可能在某个分支达到深度限制时,其他分支仍完全没有被爬取。对于大多数数据采集任务,设置深度上限的广度优先爬取能提供更可预测的覆盖范围。详情请参阅广度优先与深度优先爬取。
Bright Data 的爬虫 API支持全局和按路径模式设置深度限制,并提供已爬取页面的深度分布报告,方便您根据网站的实际结构调整限制。