种子 URL

简而言之:种子 URL 是爬虫开始发现网页时使用的起始网址。爬取中的所有其他页面都是从种子 URL 出发,通过向外跟踪链接找到的,因此,种子 URL 的选择决定了爬虫能够发现和无法发现哪些内容。

种子 URL是在爬取开始前提供给网页爬虫的初始入口点。爬虫工具会获取种子 URL,提取其中的链接,将其加入队列,然后不断向外重复此过程。一次爬取可以从一个种子 URL 开始,也可以从数千个种子 URL 开始。无法通过种子 URL 的链接到达的页面永远不会被访问,因此,种子 URL 的选择是任何爬取配置中影响最大的决策之一。

种子 URL 的工作原理:

  1. 获取:爬虫请求种子 URL 并获取其 HTML。
  2. 提取:通过链接提取获取页面上的所有链接,并将相对链接解析为绝对链接。
  3. 规范化:通过 URL 规范化对发现的 URL 进行标准化,将重复的变体合并为一个条目。
  4. 加入队列:将新 URL 添加到爬取队列,即 URL 待爬取队列。
  5. 重复:爬虫从队列中取出下一个 URL 并继续处理,直到队列为空或达到爬取深度等限制。

选择种子 URL:

优质的种子 URL 通常是链接丰富且靠近你真正所需内容的页面。首页是最常见的默认选择,但对于定向爬取通常并不理想,因为有价值的页面可能隐藏在导航后的多层链接中。分类列表、分页索引、作者归档和站点地图通常能提供更快、更完整的覆盖。

对于电商网站爬取,从分类列表页面开始,只需一到两次跳转即可到达商品页面,而从首页开始可能需要四到五次跳转。对于文档网站,从目录开始抓取几乎可以立即覆盖所有页面。当网站发布站点地图时,将其中的 URL 用作种子 URL,可以完全跳过链接发现过程。

种子 URL 策略对比:

策略 到达目标的典型跳数 覆盖范围 最适合
仅首页 4–6 广泛但较浅 小型网站、全站发现
分类页面 1–2 定向覆盖 电商、列表和目录
站点地图 URL 0 仅覆盖网站发布的内容 维护有站点地图的大型网站
多种子混合 0–2 最高 大规模生产环境爬取

爬取配置示例:

{
  "seeds": [
    "https://example.com/products/electronics",
    "https://example.com/products/home-garden",
    "https://example.com/products/clothing"
  ],
  "allowed_domains": ["example.com"],
  "max_depth": 3,
  "exclude_patterns": ["/cart", "/account", "*?sort="]
}

使用三个分类种子 URL 替代单个首页种子 URL。这样,每个商品页面都能在爬取深度限制内到达,而排除模式可阻止爬虫工具将请求浪费在购物车、账户和带排序参数的 URL 上。

种子 URL 选择中的常见错误:

  1. 仅将首页设为种子 URL:会使目标内容超出爬取深度限制,并将请求浪费在导航页面上。
  2. 将搜索结果 URL 设为种子 URL:带查询参数的页面会产生近乎无限的变体,可能使爬虫陷入死循环。
  3. 忽略分页:如果未明确跟踪分页链接,只能到达第一页的分类种子 URL 会漏掉目录中的大部分内容。
  4. 将重定向链设为种子 URL:这会消耗请求;如果未正确处理重定向,还可能将抓取工具带到非预期的域名。
  5. 设置种子 URL 时未定义范围规则:如果没有爬取范围边界,出站链接可能会使爬取完全偏离当前域名。

大规模使用种子 URL:

在小规模场景中,种子 URL 的选择会影响效率;在大规模场景中,它则决定了任务是否可行。从单个种子 URL 开始爬取数百万个页面,会将大量预算浪费在重复发现相同的导航结构上。将数千个种子 URL 分配给并行工作节点,可以消除大部分此类冗余抓取,前提是使用共享的 URL 待爬取队列,防止两个工作节点爬取同一个 URL。

Bright Data 的爬虫 API支持输入单个或批量种子 URL,可自动完成规范化和去重,并管理代理层,确保基于种子 URL 的爬取不会在运行中途被阻止。

准备好开始了吗?