什么是 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 的优势和局限性,但您还可以考虑另一种选择:使用像WebScrapingAPI 这样的刮板服务。
使用这样的服务有几个好处:
- 您可以相信刮板是可靠和维护良好的:刮板有专门的资源来确保它是最新的并能正常工作。与自己构建和维护刮板相比,这可以为您节省大量的时间和精力。
- 网络刮刀服务往往比自己制作更具成本效益:你不必投资于刮刀的开发和维护,还能利用公司提供的任何特殊功能或支持。
- 被检测到不再是问题:高级网络刮擦工具可以避免被检测到,而且通常比你自己创建的刮擦工具更有效、更高效地刮擦网站。这为您节省了时间,让您可以专注于分析和利用刮擦数据。
我们鼓励您试用我们的网络搜刮工具,亲自体验使用可信、可靠工具的好处。现在就创建一个免费账户。




