Puppeteer 和 Cheerio 在 Node.js 中的应用

Puppeteer 和 Cheerio 在 Node.js 中的应用

引言

在现代 Web 开发中,自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库:Puppeteer 和 Cheerio,它们分别用于浏览器自动化和 HTML 解析。

一、Puppeteer:浏览器自动化工具
1.1 什么是 Puppeteer?

Puppeteer 是一个 Node.js 库,提供了一个高级 API 来控制无头 Chrome 或 Chromium 浏览器。它主要用于自动化浏览器操作,如页面导航、表单提交、截图、生成 PDF 等。

1.2 Puppeteer 的主要功能
  • 浏览器自动化:可以模拟用户在浏览器中的操作,如点击、输入、滚动等。
  • 页面导航:可以导航到指定的 URL,并获取页面的内容。
  • 截图和 PDF 生成:可以对页面进行截图,或将页面内容保存为 PDF。
  • 表单提交:可以自动填写和提交表单。
  • 无头模式:可以在无头模式下运行浏览器,即不显示浏览器界面。
1.3 示例代码
javascript 复制代码
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const content = await page.content();
  console.log(content);
  await browser.close();
})();

在这个示例中,我们使用 Puppeteer 启动了一个无头浏览器,导航到 https://example.com,并获取了页面的 HTML 内容。

二、Cheerio:服务器端的 jQuery
2.1 什么是 Cheerio?

Cheerio 是一个轻量级的库,实现了 jQuery 的核心功能,专门用于解析和操作 HTML 文档。它非常适合用于服务器端的数据提取和操作。

2.2 Cheerio 的主要功能
  • HTML 解析:可以将 HTML 字符串解析为 DOM 树。
  • 选择器:支持类似于 jQuery 的选择器语法,可以方便地选择和操作 DOM 元素。
  • 数据提取:可以从 HTML 中提取所需的数据。
  • DOM 操作:可以对 DOM 元素进行增删改查操作。
2.3 示例代码
javascript 复制代码
const cheerio = require('cheerio');
const html = '<ul id="fruits"><li class="apple">Apple</li><li class="orange">Orange</li><li class="pear">Pear</li></ul>';

const $ = cheerio.load(html);

const fruits = [];
$('li').each((index, element) => {
  fruits.push($(element).text());
});

console.log(fruits); // 输出: [ 'Apple', 'Orange', 'Pear' ]

在这个示例中,我们使用 Cheerio 解析了一个 HTML 字符串,并提取了所有 <li> 元素的文本内容。

三、结合使用 Puppeteer 和 Cheerio

在实际应用中,Puppeteer 和 Cheerio 经常结合使用。Puppeteer 用于获取页面的动态内容,而 Cheerio 用于解析和提取数据。

3.1 示例代码
javascript 复制代码
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const content = await page.content();

  const $ = cheerio.load(content);

  const titles = [];
  $('h1').each((index, element) => {
    titles.push($(element).text());
  });

  console.log(titles);
  await browser.close();
})();

在这个示例中,我们首先使用 Puppeteer 获取页面的 HTML 内容,然后使用 Cheerio 解析 HTML 并提取所有 <h1> 元素的文本内容。

四、总结

Puppeteer 和 Cheerio 是两个功能强大的 Node.js 库,分别用于浏览器自动化和 HTML 解析。Puppeteer 可以模拟用户在浏览器中的操作,获取动态生成的页面内容;而 Cheerio 则提供了类似于 jQuery 的 API,方便地解析和操作 HTML 文档。通过结合使用这两个库,我们可以轻松实现复杂的 Web 自动化任务和数据抓取任务。

五、参考资料
相关推荐
掰头战士9 小时前
从LLM到Agent、Agent的6大核心。这些基础知识你还记得吗
node.js·llm·agent
FungLeo12 小时前
成为全栈·Node 后端篇·注册登录全流程实现
node.js·登录流程·成为全栈·注册流程
AI大模型-小华15 小时前
Codex CLI第一次怎么用?从安装到读取本地项目完整教程
git·node.js·ai编程·开发工具·代码分析·codex·codex cli
晴天1615 小时前
打造自己的 npm 包实战指南
前端·npm·node.js
西西小飞龙16 小时前
npm vs pnpm
前端·npm·node.js
FungLeo16 小时前
成为全栈·Node 后端篇·权限模型:从认证到 RBAC
node.js·rbac·用户认证·权限模型·成为全栈
码力斜杠哥18 小时前
CodeBuddy + Node.js 后端API完整开发指南
node.js
八角丶1 天前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
嘿嘿-662 天前
Cherry Studio 接入ChatGpt:GPT-5.6 Sol 文本测试与 GPT-Image-2 出图教程
人工智能·gpt·ai·chatgpt·node.js·ai编程
大牧师2 天前
TypeORM 学习教程
数据库·sql·学习·node.js·orm·nest.js·typeorm