爬取范围

简而言之:爬取范围是一组规则,用于定义爬虫可以访问哪些 URL。它涵盖域名边界、路径模式和排除项,是防止爬取任务无限扩大的主要手段。

爬取范围决定了爬虫的活动边界。如果不设置范围,爬虫从种子 URL出发持续跟随链接,最终会完全离开目标网站,开始爬取开放网络。每个新发现的 URL 在进入 URL 待爬取队列前都会接受范围规则检查,因此范围之外的链接会被丢弃,不会消耗带宽。

范围规则的类型:

  1. 域名范围:将爬取限制在一个或多个主机名内。最严格的规则只允许指定主机;较宽松的规则则允许子域名。
  2. 路径范围:将爬取限制在符合特定前缀或模式的 URL 路径内,例如仅爬取 /blog/ 或 /products/。
  3. 排除模式:明确屏蔽原本属于爬取范围的路径,通常包括登录页、购物车、筛选页面和打印页面。
  4. 参数规则:控制是否将不同的查询字符串视为不同 URL,或在 URL 规范化过程中将其合并。
  5. 内容类型范围:限制爬虫获取的 MIME 类型,通常排除图片、视频和二进制文件。
  6. 深度范围:通过爬取深度限制爬虫距离种子 URL 的最大跳转层级。

范围模式对比:

模式 允许访问 风险 典型用途
指定主机 仅 example.com 可能遗漏子域名上的内容 单站点爬取
主机及子域名 *.example.com 可能纳入无关的子域名 包含多个站点的大型网站
指定路径前缀 example.com/docs/* 可能遗漏该前缀之外的关联内容 文档、博客栏目
域名列表 指定的一组主机 网站发生变化时需要维护列表 竞争对手监测
不设限制 跟随任何链接 爬取任务可能永远无法结束 仅适用于全网规模的内容发现

范围配置示例:

{
  "seeds": ["https://example.com/docs/"],
  "scope": {
    "allowed_domains": ["example.com", "docs.example.com"],
    "include_patterns": ["/docs/*", "/api-reference/*"],
    "exclude_patterns": [
      "/docs/*/print",
      "*?lang=*",
      "*/search*",
      "*.pdf"
    ],
    "max_depth": 5,
    "allowed_content_types": ["text/html"]
  }
}

此配置将爬取限制在两个主机的文档路径内,跳过打印版和翻译版本,完全避开搜索端点,并且只获取 HTML 内容。

需要避免的范围陷阱:

某些 URL 模式会生成近乎无限的链接空间。如果没有排除规则,爬虫就会持续抓取,直到耗尽预算。

电商网站上的分面导航会将筛选条件组合成不同的 URL。五个筛选条件各有十个可选值,就会为同一批商品生成十万种组合。

日历页面可能无限地链接到下一个月,让爬虫逐页向前爬取,甚至进入公元 3000 年。

URL 中的会话标识符会让每次访问的页面看起来都不相同,使去重机制完全失效。

排序和分页参数会将同一列表扩展为数十个变体,只是内容顺序不同。

审慎设置爬取范围:

范围过窄会悄然遗漏内容,而且往往要到分析数据集时才会发现缺口。范围过宽则会浪费预算,还可能让爬虫进入运营者原本无意访问的第三方域名。

实用的方法是先设置较严格的范围,运行一次小规模测试爬取,检查哪些 URL 被拒绝,再有针对性地放宽规则。记录被跳过的 URL 及对应的拒绝规则,就能通过可核查的方式调整范围,而不必靠猜测。

Bright Data 的爬虫 API支持同时设置包含模式、排除模式、域名限制和深度限制,并报告各条规则过滤了哪些 URL,方便您在两次运行之间优化爬取范围。

准备好开始了吗?