您正在为选择哪种网络爬虫工具而犹豫不决吗?面对市面上琳琅满目的选择,做出决定确实不易,但请放心——我来帮您。本文将深入对比两款广受欢迎的网络爬虫工具:Cheerio 与 Puppeteer。
Cheerio 是一个用于解析和操作 HTML 文档的库,而 Puppeteer 则是一个用于控制无头 Chrome 浏览器的库。Cheerio 允许您使用类似 jQuery 的语法选择元素,而 Puppeteer 则可用于网页抓取、测试以及表单提交自动化等任务。
那么,让我们深入探讨,开始抓取吧!

您正在为选择哪种网络爬虫工具而犹豫不决吗?面对市面上琳琅满目的选择,做出决定确实不易,但请放心——我来帮您。本文将深入对比两款广受欢迎的网络爬虫工具:Cheerio 与 Puppeteer。
Cheerio 是一个用于解析和操作 HTML 文档的库,而 Puppeteer 则是一个用于控制无头 Chrome 浏览器的库。Cheerio 允许您使用类似 jQuery 的语法选择元素,而 Puppeteer 则可用于网页抓取、测试以及表单提交自动化等任务。
那么,让我们深入探讨,开始抓取吧!
Cheerio 是一个用于解析和操作 HTML 文档的 JavaScript 库,它允许您使用类似 jQuery 的语法来选择、修改文档中的元素并对其执行操作。
Cheerio 轻量且易于使用,是简单网页抓取任务的理想选择。由于无需加载所有资源和资产,其运行速度比 Chrome 或 Firefox 等完整浏览器更快,因此非常适合从 HTML 文档中提取数据。
Cheerio 拥有众多功能和优势,使其成为网页抓取的热门选择。Cheerio 的主要功能和优势包括:
Puppeteer 是一个 Node.js 库,提供用于控制无头 Chrome 浏览器的高级 API。它允许您在不实际打开 Chrome 窗口的情况下自动化 Chrome 中的任务,从而减少爬虫消耗的资源。
您可以使用 Puppeteer 执行诸如填写表单、点击按钮以及从网站提取数据等操作。
Puppeteer 的主要优势之一在于,它能以类似人类用户的方式与网站进行交互。这使其成为需要与网站进行更复杂交互的任务(如登录、页面导航和表单填写)的理想选择。
Puppeteer 拥有多项功能和优势,使其成为网页抓取和自动化领域的热门选择。Puppeteer 的主要功能和优势包括:
Cheerio 和 Puppeteer 都是广受欢迎的网页抓取工具,但二者存在一些关键差异,使得它们更适合处理特定任务。以下是 Cheerio 与 Puppeteer 之间的主要区别:
总体而言,选择 Cheerio 还是 Puppeteer 取决于您的网页抓取任务的具体需求。如果您只需从 HTML 文档中提取一些数据,且对性能有要求,Cheerio 可能是更好的选择。如果您需要自动化操作,Puppeteer 则是正确的选择。
开始之前,请确保您的机器上已安装 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 元素。
根据良好的 SEO 实践,一个页面应仅包含一个 H1 元素。因此,h1 可以作为标题的可靠选择器。
要选择封面图片的匹配器,请使用“检查”工具。图片被包裹在 `figure` 标签中,因此将父元素包含在匹配器中是个好主意。最终的匹配器是 `figure img`。
最后但同样重要的是,我们需要找到首段落的选择器。
由于首段并非父元素的第一个子元素,因此需要一个额外的 CSS 选择器。父元素有一个名为 `article-content` 的类。我们可以将该类与 `:first-of-type` 选择器结合,从而得到最终的选择器:`.article-content 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 从单个网页抓取基本数据,现在是时候将您的网页抓取技能提升到更高水平了。以下是将这个基础抓取器升级为尖端抓取器的具体方法:
虽然我们已探讨了 Cheerio 和 Puppeteer 的优势与局限,但还有另一种方案值得考虑:使用 WebScrapingAPI 这样的爬虫即服务(SaaS)平台。
使用此类服务具有以下优势:
我们诚邀您试用我们的网页抓取工具,亲身体验使用值得信赖且可靠工具带来的优势。立即注册免费账户。
