我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

Cheerio 与 Puppeteer 在网页抓取方面的对比

让我们看看哪个 Node.js 库更适合您的项目。 

Cheerio 与 Puppeteer 的对决

网页抓取时,有多种工具可供选择。总体而言,选择取决于目标网站:您想抓取静态页面还是具有无限滚动等元素的页面?Cheerio 和 Puppeteer 都是 Node.js 库,但它们的用途不同。通过本指南了解哪种工具更适合您的需求。

什么是Cheerio?

Cheerio 是一个数据解析库,用于从 HTML 或 XML 代码中提取数据。它不是一个独立的工具 - 您首先需要使用 HTTP 客户端(例如 axios)下载信息,然后将 HTML 加载到 Cheerio 中,查找元素并抓取内容。

该工具处理 HTML 数据并创建一个结构化文档(称为 DOM 树)。此树使用文档中的每个元素、属性和文本来反映 HTML 结构。

Cheerio 不是 Web 浏览器;它在服务器环境中运行。该工具无法像浏览器那样解释结果,因此无法处理嵌套在 JavaScript 中的动态元素。 

什么是木偶?

Puppeteer 是一个允许您以编程方式控制无头浏览器的库。该工具由 Google 于 2018 年开发。

该库可自动执行浏览器交互,例如移动鼠标、模拟键盘输入、填写表单、截取屏幕截图等操作。Puppeteer 首先启动浏览器,然后打开页面、导航到 URL、与页面交互并提取数据。

直到最近,Puppeteer 还只能与 Chrome 和 Chromium 配合使用,但现在它已增加对 Firefox 和 Microsoft Edge 的实验性支持。

Cheerio 与 Puppeteer:比较表

 切里奥木偶戏
主要目的网页抓取(解析)浏览器自动化和测试
设置困难 简便困难
学习曲线简便困难
JavaScript 渲染 没有
性能 快速比较慢
代理集成
社區S小号L大号
最适合解析静态网页加载和解析动态网页

Cheerio 与 Puppeteer 在网页抓取方面的对比

声望

根据 npmtrends.com 的数据,Cheerio 的每月下载量一直高于 Puppeteer。 

Cheerio 与 Puppeteer npmtrends

另一方面,Github 数据显示情况并非如此——Puppeteer 拥有更多 fork 和 star。因此,我们可以说 Cheerio 和 Puppeteer 都是网络抓取社区中非常受欢迎的工具。 

干杯: 1.7 分,27.5 颗星

傀儡师: 9.2 分,86.1 颗星

先决条件和安装

Cheerio 和 Puppeteer 的安装过程基本相同,因为这两个工具都适用于 Node.js。您必须从官方网站安装最新的 Node.js 版本。

要安装 Node 包管理器 (npm) 包,只需打开终端或命令提示符并输入以下命令:

如果你使用 Puppeteer:

				
					npm install puppeteer

				
			

如果你使用 Cheerio:

				
					npm install cheerio

				
			

由于 Puppeteer 可以独立运行,因此你不需要安装其他依赖项。对于 Cheerio,你需要实现 axios HTTP 客户端(或 任何其他图书馆 你比较喜欢):

				
					npm install axios

				
			

产品特性

啦啦队。 它基于 parse5 来解析 HTML,基于 htmlparser2 来解析 XML 文档。这使得该工具灵活且具有强大的解析能力。 

Cheerio 允许您使用 jQuery 语法来选择和操作 HTML 文档中的数据。因此,如果您熟悉 jQuery,那么使用 Cheerio 非常简单。

该解析器比 Puppeteer 更快,因为它在服务器端运行,并且占用更少的计算能力

木偶。 该库让您可以完全控制浏览器。它默认以无头模式运行,但您可以切换到有头模式。这将向您显示可见的浏览器用户界面,因此您可以在抓取时更轻松地排除故障。 

Puppeteer 的一大特色是它提供了像 puppeteer-extra-plugin-stealth 这样的插件来伪造浏览器指纹。它减少了无头浏览器和真实浏览器之间的细微差异。此外,由于 Puppeteer 控制浏览器,它可以模仿页面上的用户操作。

该库通过执行 JavaScript 来定位信息。这使得 Puppeteer 能够动态地与网页交互并实时定位元素。

性能

啦啦队。 该工具比 Puppeteer 快得多。原因是 Cheerio 不需要执行 JavaScript - 它只需使用 DOM 解析器并遍历原始 HTML 数据。此外,Cheerio 的轻量级特性使其成为需要速度的简单抓取任务的理想选择。

木偶。 与 Selenium 等其他无头浏览器库相比,Puppeteer 速度更快,因为它使用的开销更少。但 Puppeteer 处理的动态网站比抓取静态页面需要更多的资源,因此该库比 Cheerio 慢。

易用性

啦啦队。 对于网络抓取新手来说,Cheerio 比 Puppeteer 更容易使用。这是可以预见的,因为 Cheerio 只能处理 HTML 代码;您不需要与基于动态元素(例如延迟加载)的页面进行交互。此外,与 Puppeteer 不同,Cheerio 是专为网络抓取而开发的,因此它的语法不太复杂。

木偶。 总体而言,使用无头浏览器库更为复杂。现代网站的 HTML 变化很大,因此您需要维护抓取工具。Puppeteer 使用等待函数 (waitForSelector),直到元素出现在页面上。如果元素在 30 秒内未出现,Puppeteer 会给您一个错误。因此,设置不当的延迟或超时可能会阻碍您的网页抓取工作。

社区支持和文档

啦啦队。 该工具的文档很一般。据创建者称,该网站仍在完善中。它涵盖了基础和高级教程,但不如 Puppeteer 的文档那么详尽。此外,创建者表示,大多数指南都是用 ChatGPT 编写的,这让人对内容的质量产生了一些疑问。

您可以在 GitHub 和 StackOverflow 上找到 Cheerio 社区。与 Puppeteer 相比,Cheerio 在 StackOverflow 上的问题较少,但查看次数较多。社区乐于助人且反应迅速,可以更轻松地找到常见问题的答案。

木偶。 该库的社区比 Cheerio 更大。您会在 StackOverflow 上找到数千个讨论。

Puppeteer 拥有出色的文档,其中包括示例、详细说明和该工具的最佳实践。因此,如果您是初次使用者,您应该能够很快掌握该工具。此外,官方 GitHub 存储库得到积极维护,并定期更新和修复错误。

Cheerio 和 Puppeteer 的替代品

如果您想尝试其他解析器,可以使用 Python 的 Beautiful Soup。它是初学者和开发人员的热门选择。该工具易于使用,并包含三个强大的内置 HTML 解析器。此外,它还能够处理损坏的 HTML 页面。

通过真实示例逐步指导 Beautiful Soup 网页抓取。

在抓取动态网站方面,还有其他工具可以处理 JavaScript 呈现的内容。例如,您可以使用 Playwright,它与 Puppeteer 非常相似 - 占用资源少且速度快。或者使用 Selenium - 一个已经存在二十年的工具。 

无法决定选择 Playwright 还是 Selenium?我们可以帮您。

Adam Dubois 的图片
亚当·杜波依斯
代理极客和开发人员。