每当你在 Google、Bing 或 DuckDuckGo 上搜索,在零点几秒内就得到一个按相关性排名的页面列表,你看到的是在你键入查询之前早已完成的工作的成果。一个网络爬虫程序提前遍历了网络,读取了页面,跟踪了页面上的链接,并将发现的内容交给了索引。搜索框之所以感觉即时,是因为爬虫已经提前完成了那些耗时的工作。

本指南解释什么是网络爬虫程序,它实际服务于什么目的,以及其核心循环是如何运作的:种子 URL、待访问页面的队列、获取、解析、提取新链接、然后重复。在此基础上,我们将探讨爬虫在搜索之外的用途、爬虫与爬虫程序之间的区别、礼貌性和 robots.txt 的重要性,以及当你需要运行自己的爬虫时托管爬取服务的位置。

什么是网络爬虫程序?

网络爬虫,有时也称为蜘蛛或机器人,是一种以有组织、自动化的方式浏览网络的程序。它从一个或多个已知页面出发,读取它们,跟踪其中发现的链接,并不断前进,在行进过程中构建出一张关于外部世界存在什么的地图。搜索引擎几乎持续不断地运行爬虫,这样当你输入查询时,就已经有一份相关页面的列表等待着被排名和返回。

想象它的经典方式是:一位馆员在一座庞大而杂乱无章的图书馆里工作。为了让每本书都能被找到,馆员走遍书架,阅读每本书的标题和简短摘要,记录每本书的主要内容,并将这些信息写到索引卡上,以便其他人日后能快速找到正确的书。爬虫对网络做的是同样的事,只不过书架永远不会有尽头,而且每秒都有新书出现。它读取一个页面,记录这个页面是关于什么的,记录其链接指向何处,然后继续访问那些链接指向的页面。

这种规模难以想象。没有人确切知道公共网络有多大比例已被爬取和索引,而且总量还在持续变动,因为每天都有海量的新内容发布。这项工作永远不会完成,这就是为什么爬虫被构建为一个无限期运行的循环,而非一个会结束的任务。

网络爬虫如何工作?

在所有的规模背后,机制是一个简单的循环,重复数百万次。一旦你能说出每个步骤的名称,其余内容就顺理成章了。

1. 从种子 URL 出发

爬虫从一粒种子开始:一个或一组已知 URL,作为最初的访问入口。这些是起始点。从一个连接性好的单一种子出发,爬虫只需不断向外跟踪链接,最终就能到达网络的相当大一部分。

2. 获取页面

爬虫向托管它的 Web 服务器请求一个页面,方式与你访问网站时浏览器的做法完全相同。服务器用页面内容响应,爬虫此时就拥有了可以处理的原始素材。

3. 解析并提取链接

爬虫读取页面,记录对索引有价值的文本和元数据,并提取其中包含的所有超链接。这些链接是通向下一批页面的线索。

4. 将新链接加入边界队列

新发现的链接进入一个等待访问的页面队列,这通常被称为边界队列(frontier)。爬虫不会一次性或随机地访问所有链接,而是按照关于哪些页面最重要以及多久重新访问一次的规则,有序地处理队列。

5. 重复

爬虫从边界队列中取出下一个 URL,再次运行整个循环:获取、解析、提取、入队。由于每个新页面往往包含更多链接,边界队列不断补充,循环持续进行。不同的搜索引擎用各自的专有逻辑对这些步骤进行加权,因此两个爬虫的行为会有些不同,但最终目标相同:从整个网络下载和索引内容。

爬虫无法永无止境地跟踪每一个链接,因此它需要做出选择。一个被许多其他页面链接、吸引大量访客的页面,说明其权威性高、内容质量好,因此爬虫将其视为值得索引和重复访问的对象。爬虫还必须决定多久再次检查一个页面是否有更新,因为内容频繁变化的页面比几乎不动的页面需要更频繁的访问。

从爬取到搜索索引

爬取负责收集页面;索引负责组织它们,使其可被搜索。索引就像一个数据库记录,记录哪些内容可以通过哪些词找到,这样当你发出查询时,引擎不需要重新读取整个网络,而是在其索引中查找这些词,并返回最相关的匹配结果。

索引专注于页面上的文本及其元数据。大多数搜索引擎将页面上的词加入索引,但有些会跳过极其常见的词。例如,Google 历史上就没有索引"a"、"an"和"the"这样的词,因为它们几乎无处不在,对搜索的帮助微乎其微。最终结果是一个将数十亿个爬取页面转化为你可以在毫秒内查询的结构。

爬虫如何决定访问什么:robots.txt

在爬取一个网站之前,行为良好的爬虫会检查机器人排除协议,通常是托管在网站根目录的 robots.txt 文件。这个文本文件告诉机器人哪些部分可以爬取,哪些链接应该忽略。尊重 robots.txt 的爬虫会在每个网站上读取这些指令并遵守它们,这是区分好机器人和坏机器人的主要标准之一。

同一个引擎,多种用途。 驱动搜索索引的同一爬取循环,同样驱动着 SEO 审计、价格和市场监控、网络归档,以及训练数据的收集。机制保持不变,改变的只是你如何处理获取到的页面。

网络爬虫用于哪些方面?

搜索是爬虫最著名的用途,但远非唯一。同样的获取、解析和跟踪链接的循环,是一旦你将其指向正确的页面并保留它带回的数据,就能完成广泛工作的基础。

搜索索引

这是最初的目的。搜索引擎的爬虫持续不断地遍历公共网络,以便始终有一个新鲜的索引用于对查询排名。没有爬取,搜索引擎就没有任何可搜索的东西。这种用途自 1990 年代末就已存在,至今仍是人们在线查找信息方式的支柱。

SEO 审计

由于搜索可见性取决于爬虫能否读取你的网站以及如何读取,网站所有者会运行自己的爬虫,以 Google 的视角对其进行审计。爬取能揭示断链、被 robots.txt 屏蔽的页面、重复内容、缺失的元数据,以及没有入站链接的孤立页面。搜索引擎优化是准备内容以使其能良好被索引的实践,爬取则是检查页面是否真正可达的方式。一个没有蜘蛛爬取的页面无法被索引,不在索引中的页面永远不会出现在搜索结果中,这正是所有者主动审计自己的可爬性而非将其交给命运的原因。

价格和市场监控

企业将爬虫指向竞争对手的目录和市场平台,随时间追踪价格、库存水平和产品变化。按计划运行,爬虫将分散的公开列表转化为结构化的数据馈送,为定价策略和市场分析提供依据。这是企业构建自己的爬虫而非依赖通用搜索引擎的最常见商业原因之一。

网络归档

档案机构使用爬虫捕获页面在某一时刻的快照,保存那些否则会变化或消失的内容。爬虫访问一个页面,存储其内容,然后继续前进,构建一部研究人员和公众日后可以重访的历史记录。

AI 训练数据

现代机器学习模型在从公共网络收集的大量文本和其他内容上进行训练。爬虫通过大规模遍历页面并保存发现的内容来组装这些集合。随着对数据驱动产品的需求增长,这已成为运行爬虫增长最快的原因之一,与由来已久的分析和监控用途并列。

在所有这些用途背后,驱动因素是相同的:组织越来越希望基于数据做出决策,而公共网络是其中最大的数据来源。能够大规模收集和组织这些信息的工具,使其余一切成为可能。即便已经有 Google、Bing、百度和 Yandex 等主流搜索引擎在持续爬取网络,企业在需要特定数据、按特定时间表、以通用搜索引擎不会提供的格式时,仍然会构建自己的爬虫。

网络爬虫与网页抓取器:区别是什么?

这两个术语经常被混用,但有一个值得厘清的真实区别。

网络爬虫的工作是发现和映射:它广泛扫描页面并跟踪链接,对跨网站或整个网络存在的内容进行目录整理。把它想象成在画地图。网页抓取器的工作是提取:它瞄准特定页面,从中取出特定值,如价格、标题或联系方式。把它想象成在用放大镜查看爬虫画的地图。

在传统的流水线中,两者按顺序工作。爬虫绘制出哪些页面存在的地图,然后抓取器从这些页面中提取所需字段。爬取是广泛而持续的,跟踪链接走向任何地方;抓取是狭窄而有针对性的,追踪已知页面或已知网站。在日常用法中,这条界限已经模糊,随着越来越多的企业为商业目的提取网络数据,"抓取"成了更常见的词,而"爬虫"则仍倾向于特指搜索引擎活动。下表总结了对比。

维度 网络爬虫 网页抓取器
主要目标 发现并索引页面 从页面中提取特定数据
范围 广泛,跨站点跟踪链接 狭窄,针对已知页面
输出 存在内容的地图或索引 你所需要的结构化字段
典型运行 持续,开放式 有针对性,通常一次性或定时
经典关联 搜索引擎 商业数据提取

如果你想深入了解发现层面,关于什么是网络爬虫及其用例和示例的入门文章扩展了同样的思路;关于网络爬取技术和框架的概述则介绍了爬虫在实践中是如何构建的。

网络爬虫程序面临的挑战

一旦在任何真实规模上运行,运行爬虫比简单的循环所暗示的要复杂得多。几个反复出现的问题决定了生产爬虫的设计方式。

保持索引新鲜

网站在不断变化,动态页面每次访问都可能不同。爬虫昨天收集的数据今天可能已经过时。为了保持结果的时效性,爬虫必须重新访问页面,并决定哪些页面需要最频繁地重新访问,同时不浪费精力重新爬取那些很少变化的页面。

爬虫陷阱

一些网站会生成无尽的链接结构,有时是故意的,将爬虫诱入永远请求页面的循环。这些陷阱浪费爬虫的时间和资源,因此构建良好的爬虫需要设置限制和循环检测以避免陷入其中。

网络带宽

获取大量不相关页面,或过于激进地重新爬取,会消耗大量带宽,并给爬虫和它访问的服务器都造成压力。高效的爬虫会设置优先级,将其处理能力花在真正重要的页面上。

重复内容

相同的内容经常出现在多个 URL 上,这使得很难决定保留哪个版本。搜索引擎通过为每组近似重复页面选择一个规范版本显示在结果中,而非索引所有副本来处理这个问题。

礼貌地爬取:robots.txt 和速率限制

爬虫向 Web 服务器发送请求,就像任何访客一样。发送太多、太快,可能推高网站的带宽成本或使其服务器过载。网站所有者可能也有他们不想被爬取的页面,例如内部搜索结果页面、只对单个用户有用的自动生成页面,或者他们宁愿不出现在搜索引擎上的未公开活动落地页。所有者通过"noindex"标签或 robots.txt 中的"disallow"规则来表达这些意愿,负责任的爬虫会遵守它们。

好机器人和坏机器人的区别就在于这种克制。为了在未经许可的情况下抓取内容而构建的爬虫可能无视它给服务器带来的负载,而主流搜索引擎的爬虫则遵守 robots.txt,并控制请求速率以免压垮它们访问的网站。三种做法能让爬虫保持在这条线的正确一侧。

尊重爬取速率

网站可以表达它们在给定时间窗口内能容忍多少爬取量,实际上是对访问设定速度限制。好的爬虫不超过这个限制,就像你遵守交通规则以保持道路畅通一样。

遵守 robots.txt

将 robots.txt 视为你被允许去哪里的地图。在每个网站上读取它,只爬取它许可的区域。遵守这些指令是行为良好的爬虫最清晰的标志。

负责任地轮换 IP 地址

网站会监控自动化流量,可能对看起来不像真人的访客发起挑战或将其封锁,有时会使用 CAPTCHA。需要大规模收集公开数据的爬虫会将请求分散到轮换的 IP 地址上,使其看起来像普通流量,而非一台机器在敲打网站。在与尊重速率限制和 robots.txt 相结合的情况下,负责任地这样做,可以防止合法爬虫被误认为攻击。

关于在大规模爬取时保持在合理边界内的更多内容,了解搜索引擎如何检测爬虫很有帮助,因为相同的信号适用于任何自动化客户端。

Crawlbase Crawling API

构建一个保持礼貌性、能轮换 IP、能渲染 JavaScript、能清除 CAPTCHA 的爬虫是大头工作,而这些都不是你真正想要的数据。Crawlbase Crawling API 在一次请求背后处理所有这些:你指定页面,它返回内容,这样你就可以专注于爬取逻辑和如何处理结果。你最多可获得 20,000 次免费请求。

互联网上最活跃的网络爬虫

公共网络上的大部分爬取流量来自与主流搜索引擎相关的一小组知名机器人。你会在自己的服务器日志中看到这些名称:

  • Googlebot(Google),实际上以两个爬虫的形式运行,Googlebot Desktop 和 Googlebot Mobile,分别用于桌面和移动搜索。
  • Bingbot(微软 Bing)。
  • Yandex Bot(Yandex,俄罗斯搜索引擎)。
  • Baidu Spider(百度,中国搜索引擎)。
  • Amazonbot(Amazon),用于网络内容识别和反向链接发现。
  • DuckDuckBot(DuckDuckGo)。
  • Exabot(Exalead,法国搜索引擎)。
  • Yahoo! Slurp(Yahoo)。

除这些之外,还有许多知名度较低的蜘蛛,有些与搜索引擎相关,有些则不然。将好的爬虫与恶意机器人区分开来对网站所有者来说是一个真实的问题:坏机器人可能降低性能、使服务器崩溃或窃取数据,因此机器人管理的目标是在过滤掉有害流量的同时让好的爬虫正常流动,而非将所有自动化流量一刀切地封锁。

构建你自己的网络爬虫

如果通用搜索引擎无法以你需要的格式、在你需要的时间表上提供你需要的数据,构建自己的爬虫是一条合理的路径。循环与上面描述的相同:种子、获取、解析、提取链接、重复,加上管理队列的边界,以及保持礼貌性的规则。编程语言由你决定。许多团队从 Python 开始,其他团队根据自己的技术栈用 Java 或其他语言构建爬虫。

如果你想要一个具体的起点,可以用 Python 构建爬虫,或者按照一个示例学习如何用 Java 构建网络爬虫。无论你选择哪种,预计大部分工程工作不会花在爬取循环本身,而是花在周边问题上:渲染 JavaScript 繁重的页面、轮换 IP 地址、处理 CAPTCHA、重试失败、以及尊重每个网站的限制。这正是托管爬取服务旨在从你的工作中卸除的部分,让你只需编写决定爬什么和保留什么的逻辑。

回顾

核心要点

  • 爬虫自动绘制网络地图。 它从种子 URL 出发,获取页面,跟踪链接,不断重复,构建存在内容的索引,而非仅仅读取单个页面。
  • 这个循环就是整个引擎。 种子、获取、解析、将链接提取进边界队列、重复。每个爬虫,无论多大,都由这一个单一循环构建而成。
  • 一个引擎服务于多种用途。 同样的爬取循环驱动着搜索索引、SEO 审计、价格和市场监控、网络归档,以及收集 AI 训练数据。
  • 爬取负责发现,抓取负责提取。 爬虫绘制出哪些页面存在的地图;抓取器从已知页面中提取特定字段。它们通常按顺序运行。
  • 礼貌性是不可谈判的。 好的爬虫遵守 robots.txt,保持在爬取速率以内,并分散请求,使其永远不会使它访问的网站过载。

常见问题

网络爬虫程序的目的是什么?

网络爬虫的目的是自动浏览网络,通过跟踪链接发现页面,并收集其内容以便索引或在其他地方使用。搜索引擎使用爬虫构建用于对查询排名的索引,但同样的机制也驱动着 SEO 审计、价格监控、网络归档,以及收集 AI 训练数据。

网络爬虫如何工作?

爬虫从一个或多个种子 URL 出发,获取每个页面,解析它,并提取其包含的超链接。这些链接进入一个称为边界队列的等待列表,爬虫处理这个队列,获取并解析每个新页面,并加入发现的链接。这个循环持续重复,这就是为什么单一起点能够到达网络的相当大一部分。

网络爬虫和网页抓取器的区别是什么?

网络爬虫通过跟踪链接广泛地发现和映射页面,而网页抓取器从已知页面中提取特定数据。爬取关注探索和目录整理已存在的内容;抓取关注从那个目录中提取有针对性的值。在传统流水线中,爬虫先映射页面,抓取器再从中提取,尽管这两个术语今天经常被混用。

网络爬虫必须遵守 robots.txt 吗?

知名爬虫,包括主流搜索引擎的爬虫,会读取每个网站的 robots.txt 文件,只爬取其许可的区域。该文件是网站告知机器人哪里可去哪里不可去的标准方式。遵守它,以及网站的爬取速率,是将行为良好的爬虫与坏机器人区分开来的标志,尽管没有任何机制在物理上强迫一个写得糟糕的爬虫遵从。

企业为什么要构建自己的网络爬虫?

当通用搜索引擎无法以所需形式、在所需时间表上提供所需的特定数据时,企业就会构建爬虫。常见原因包括监控竞争对手价格、追踪市场和产品变化、对自己的网站进行 SEO 审计、归档内容,以及为分析或机器学习组装数据集。

运行网络爬虫合法吗?

爬取公开页面是广泛实践的,但你对如何做负有责任。坚持公开数据,阅读并尊重每个网站的服务条款和 robots.txt,诚实地标识你的请求,并保持合理的请求速率,以免给别人的服务器造成压力。托管爬取服务可以通过控制和分散请求帮助你保持礼貌,但收集什么的判断仍然是你的责任。

开始构建

大规模爬取任何站点,无需与基础设施对抗。

Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。

自助开通 · 无需销售通话 · 提供企业级爬取量