Cheerio 与 Puppeteer 在网页抓取方面的对比
让我们看看哪个 Node.js 库更适合您的项目。
网页抓取时,有多种工具可供选择。总体而言,选择取决于目标网站:您想抓取静态页面还是具有无限滚动等元素的页面?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。
另一方面,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?我们可以帮您。