Cheerio 与 Puppeteer:最佳网络抓取工具选择指南

Suciu Dan,2023 年 4 月 11 日

博客图片

您是否正在考虑使用哪种工具进行网络搜索?要在众多不同的选择中做出选择可能很难,不过别担心,我可以帮你。在本文中,我们将仔细分析 Cheerio 与 Puppeteer 这两款流行的网络搜刮工具。

Cheerio 是一个用于解析和操作 HTML 文档的库,而 Puppeteer 则是一个用于控制无头 Chrome 浏览器的库。Cheerio 允许你使用类似于 jQuery 的语法来选择元素,而 Puppeteer 则可用于网络搜索、测试和自动表单提交等任务。

那么,让我们开始 "拼搏 "吧!

什么是 Cheerio?

Cheerio 是一个 JavaScript 库,可以解析和处理 HTML 文档,使用类似 jQuery 的语法选择、修改文档中的元素并对其执行操作。

Cheerio 轻便易用,是执行简单网络搜索任务的不错选择。它还比使用 Chrome 或 Firefox 等完整浏览器更快,因为它无需加载所有资产和资源。这使它成为从 HTML 文档中提取数据的理想选择。

Cheerio 有许多功能和优点,因此成为网络搜索的热门选择。Cheerio 的一些主要功能和优点包括

  • 轻便易用Cheerio 设计轻巧、易于使用,是执行简单网络搜索任务的最佳选择。它的语法与许多开发人员熟悉的 jQuery 相似,只需几行代码就能选择和操作 HTML 文档中的元素。
  • 速度快 Cheerio 无需像浏览器那样加载所有资产和资源,因此比使用完整的浏览器进行网络搜刮更快。因此,对于速度要求较高的任务来说,Cheerio 是一个不错的选择。
  • 支持 HTML 和 XML 文档:Cheerio 可以解析和处理 HTML 和 XML 文档,让您可以根据需要灵活处理不同类型的文档。
  • 可与其他工具结合使用Cheerio 可与 Fetch API 或 Axios 等其他工具结合使用,以执行网络搜索任务。这样,您就可以根据自己的具体需求定制工作流程,并使用最适合的工具来完成工作。

什么是 Puppeteer?

Puppeteer 是一个 Node.js 库,为控制无头 Chrome 浏览器提供了一个高级 API。通过它,您可以在 Chrome 浏览器中自动执行任务,而无需实际打开 Chrome 浏览器窗口,从而减少了您的刮擦程序将消耗的资源数量。

您可以使用 Puppeteer 执行填写表格、点击按钮和从网站提取数据等操作。

Puppeteer 的主要优点之一是,它能让你以类似人类用户的方式与网站进行交互。因此,对于需要与网站进行更复杂交互的任务(如登录、浏览网页和填写表格)来说,Puppeteer 是一个不错的选择。

Puppeteer 具有多种功能和优势,是网络搜索和自动化的热门选择。Puppeteer 的一些主要功能和优势包括

  • 高级 API:Puppeteer 提供易于使用和理解的高级 API。这使它成为初涉网络搜索或自动化的开发人员的理想选择。
  • 控制无头 Chrome 浏览器Puppeteer 允许你控制无头 Chrome 浏览器,这意味着你可以在 Chrome 浏览器中自动执行任务,而无需实际打开 Chrome 浏览器窗口。因此,对于需要与网站进行更复杂交互的任务来说,Puppeteer 是一个不错的选择。
  • 模仿人类行为Puppeteer 可以模仿人类行为,如点击按钮、滚动和填写表格。因此,对于需要与网站进行更复杂交互的任务来说,它是一个不错的选择。
  • 支持现代网络功能:Puppeteer 完全支持 JavaScript、cookie 和验证码等现代网络功能。因此,对于需要这些功能的任务来说,Puppeteer 是一个不错的选择。
  • 可与其他工具结合使用Puppeteer 可与 Cheerio 等其他工具结合使用,以执行网络搜索任务。这样,你就能根据自己的具体需求定制工作流程,并使用最适合的工具来完成工作。

Cheerio 与 Puppeteer 的区别

Cheerio 和 Puppeteer 都是很受欢迎的网络搜刮工具,但它们有一些主要区别,使其更适合某些任务。以下是 Cheerio 与 Puppeteer 之间的一些主要区别:

  • 性能Cheerio 一般比 Puppeteer 快,因为它无需像浏览器那样加载所有资产和资源。不过,Puppeteer 的优势在于能以类似人类用户的方式与网站进行交互,这可以使它在执行某些任务时更快。
  • 功能Cheerio 适用于从 HTML 或 XML 文档中提取数据的简单网络抓取任务。Puppeteer 功能更强大,可以在无头 Chrome 浏览器中自动执行任务,如登录、浏览网页和填写表格。
  • 易于使用:Cheerio 的语法与许多开发人员熟悉的 jQuery 相似。因此,对于那些已经熟悉 jQuery 的人来说,它很容易使用。Puppeteer 也有一个易于使用的高级 API,但与 Cheerio 相比,它需要更多的设置和配置。

总的来说,Cheerio 与 Puppeteer 之间的选择取决于你的网络抓取任务的具体需求。如果你只需要从 HTML 文档中提取一些数据,而性能又是一个问题,那么 Cheerio 可能是更好的选择。如果需要自动化,Puppeteer 则是正确的选择。

检查或安装 Node.JS

开始之前,请确保您的计算机上安装了 Node.JS。本文使用的 Node 版本是 18.9.0。运行此命令检查本地版本:

node -v

如果出现错误,请从官方网站下载并安装 Node.js。这还将安装 Node.js 的软件包管理器 `npm`。

建立项目

打开终端,新建名为 `scraper` 的文件夹。访问该目录并运行 npm init 命令。这将为你的项目创建一个 `package.json` 文件,其中包含名称、版本和依赖关系等元数据。

按照提示输入有关项目的信息。您可以按 "Enter "键接受每个提示的默认值,也可以根据需要输入值。

现在您可以开始安装依赖项并为项目创建文件:

npm install cheerio puppeteer

这些依赖项将安装在项目的 `node_modules` 目录中,并将添加到 `package.json` 文件的依赖项部分。

确定目标

在本文中,我们将从ArsTechnica 上抓取一篇文章,并从文章正文中提取文章标题、封面图片 URL 和第一段。

数据提取基础速成班

首先,访问目标网站并打开一篇文章。右键单击文章标题并选择 "检查"。这将打开 "开发工具",并高亮显示标题标记的 HTML 元素。

博客图片

为了达到良好的搜索引擎优化效果,一个页面只能有一个 H1 元素。因此,h1 可以作为标题的可靠选择器。

要选择封面图片的选择器,请使用 Inspect 工具。图片被包裹在一个 `figure` 标签中,因此最好在选择器中包含父元素。最终的选择器是 `figure img`。

最后,我们需要找到第一段的选择器。

博客图片

由于第一段不是父元素的第一个子元素,因此需要额外的 CSS 选择器。父元素有一个名为 `article-content` 的类。我们可以将该类与 `:first-of-type` 选择器结合使用,创建最终选择器:`.article-content p:first-of-type`。

这是带有选择器的最终列表:

  • 标题: `h1
  • 封面图片:图象
  • 第一段:文章内容 p:first-of-type

制造刮刀

既然项目中已经有了依赖项,我们就来看看如何将 Cheerio 和 Puppeteer 结合起来使用,创建一个网络刮板。通过结合这两个工具,你可以创建一个既快速又强大的刮板,让我们开始吧!

创建名为 `scrape.js` 的文件并粘贴以下代码:

const puppeteer = require('puppeteer');

const cheerio = require('cheerio');

async function scrape() {

// Launch a headless Chrome browser

const browser = await puppeteer.launch();

// Create a new page

const page = await browser.newPage();

// Navigate to the website you want to scrape

await page.goto('https://arstechnica.com/tech-policy/2023/01/musk-led-twitter-faces-another-lawsuit-alleging-it-failed-to-pay-bills/');

// Wait for the page to load

await page.waitForSelector('h1');

// Extract the HTML of the page

const html = await page.evaluate(() => document.body.innerHTML);

// Use Cheerio to parse the HTML

const $ = cheerio.load(html);

// Extract the title, cover image, and paragraph using Cheerio's syntax

const title = $('h1').text();

const paragraph = $('.article-content p:first-of-type').text()

const coverImage = $('figure img').attr('src');

// Display the data we scraped

console.log({

title,

paragraph,

coverImage

});

// Close the browser

await browser.close();

}

scrape();

您可以使用 node scrape.js 命令运行代码。输出结果应显示文章标题和封面图片 URL,并应如下所示:

{

title: 'Lawsuit: Twitter failed to pay $136,000 in rent at San Francisco office tower',

paragraph: 'The Elon Musk-owned Twitter is facing another lawsuit alleging that it failed to pay its bills.',

coverImage: 'https://cdn.arstechnica.net/wp-content/uploads/2023/01/getty-musk-twitter-800x533.jpg'

}

更上一层楼

现在,你已经学会了如何使用 Puppeteer 和 Cheerio 从单个网页中抓取基本数据,是时候让你的网络抓取技能更上一层楼了。下面介绍如何将这种基本刮板变成最先进的刮板:

  • 抓取整个类别:通过修改代码中的 URL 和选择器,可以从一个类别中抓取文章。这对于抓取大量数据或跟踪特定类别内容的更新非常有用。
  • 每次请求使用不同的用户代理:通过更改搜刮器的用户代理,可以绕过限制,更好地模仿人类行为。这对于根据用户代理阻止或限制请求的网站来说非常有用。
  • 整合代理网络:代理网络可以帮助你轮换 IP 地址,避免被发现。这对于屏蔽 IP 地址或限制请求速率的网站来说尤其有用。
  • 解决验证码问题:有些网站使用验证码来防止自动搜索。有几种方法可以绕过验证码,例如使用验证码解决服务或实施机器学习模型来识别和解决验证码。

收尾工作

现在,你应该对 Cheerio 和 Puppeteer 的优势和局限有了很好的了解,应该能够做出明智的决定,确定哪一个最适合你的需求。无论你是初学者还是经验丰富的开发人员,总有一款网络刮擦工具适合你。

如果你想深入了解 Cheerio,可以看看我的一位同事写的这篇文章。它涵盖了使用 Inspect 元素识别节点、将结果保存到磁盘以及更详细地刮擦 Reddit 等大型网站等主题。

我们才刚刚触及 Puppeteer 的功能。如果你想了解更多,这篇文章 会更深入地介绍截图、提交表单和扫描多个页面等主题。

我们希望这篇文章能帮助您了解可供您选择的方案,并根据您的网络搜索需求做出最佳决定。

更简单的替代方案

虽然我们已经讨论过 Cheerio 和 Puppeteer 的优势和局限性,但您还可以考虑另一种选择:使用像WebScrapingAPI 这样的刮板服务。

使用这样的服务有几个好处:

  • 您可以相信刮板是可靠和维护良好的:刮板有专门的资源来确保它是最新的并能正常工作。与自己构建和维护刮板相比,这可以为您节省大量的时间和精力。
  • 网络刮刀服务往往比自己制作更具成本效益:你不必投资于刮刀的开发和维护,还能利用公司提供的任何特殊功能或支持。
  • 被检测到不再是问题:高级网络刮擦工具可以避免被检测到,而且通常比你自己创建的刮擦工具更有效、更高效地刮擦网站。这为您节省了时间,让您可以专注于分析和利用刮擦数据。

我们鼓励您试用我们的网络搜刮工具,亲自体验使用可信、可靠工具的好处。现在就创建一个免费账户。

新闻和更新

订阅我们的时事通讯,了解最新的网络搜索指南和新闻。

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

相关文章

缩图
网络抓取科学轻松进行网络抓取:数据解析的重要性

了解如何通过数据解析、HTML 解析库和 schema.org 元数据有效地提取和组织数据,以便进行网络搜刮和数据分析。

Suciu Dan
作者头像
Suciu Dan
12 分钟阅读
缩图
使用案例XPath 与 CSS 选择器

XPath 选择器比 CSS 选择器更适合网络搜索吗?了解每种方法的优势和局限,为您的项目做出正确的选择!

米哈伊-马克西姆
作者头像
米哈伊-马克西姆
8 分钟阅读
缩图
指南如何使用 Puppeteer 制作刮刀并下载文件

了解如何使用 Puppeteer 下载文件的 3 种方法,并构建一个能完全做到这一点的网络搜刮器。

米赫内亚-奥克塔维安-马诺拉什
作者头像
米赫内亚-奥克塔维安-马诺拉什
8 分钟阅读