什么是 Cheerio,为什么需要它?
\n\nCheerio 是一个快速、灵活且轻量级的库,用于在 Node.js 服务器端解析 HTML 和 XML。它为开发者提供了强大的类似 jQuery 的语法,用于导航、搜索和操作 DOM 树。如果您曾在浏览器中使用过 jQuery,那么 Cheerio 对您来说将是直观易懂的——Cheerio 实现了 jQuery 的一个子集,并针对服务器端使用进行了适配。
\n\nCheerio 的主要使用场景:
\n- \n
- 网页抓取 (Web Scraping): 从网页中提取数据(价格、新闻标题、文章内容)。 \n
- 测试: 在单元测试中检查 HTML 模板的结构,而无需真实的浏览器。 \n
- HTML 预处理: 在将 HTML 文档发送给客户端之前,对其进行清理、转换和提取部分内容。 \n
- 解析 RSS/XML 源: 处理 XML 文档,尽管有更专业的 XML 工具。 \n
与完整的浏览器引擎(例如 Puppeteer 或 Playwright)不同,Cheerio 不会渲染 JavaScript,也不会加载 CSS、图像或外部资源。这使得它极其快速且节省内存。Cheerio 处理的是您通过 HTTP 请求(使用 axios、node-fetch 或内置的 http/https 模块)获得的现成 HTML 字符串。
\n\n安装 Cheerio
\n\n通过包管理器 npm(或 yarn)在 Node.js 项目中安装 Cheerio。在项目根目录打开终端并执行:
\n\nnpm install cheerio\n\n如果您使用 yarn:
\n\nyarn add cheerio\n\n安装后,您可以将该库导入到您的代码中:
\n\nconst cheerio = require('cheerio');\n// 或用于 ES 模块:\n// import * as cheerio from 'cheerio';\n\n请注意:Cheerio 是一个用于 Node.js 的库,不适用于浏览器。如果您需要在客户端解析 HTML,最好使用原生的 DOMParser。
\n\n快速入门:第一个示例
\n\n让我们编写一个简单的脚本,加载一个 HTML 字符串,找到其中所有链接,并输出它们的文本和 href 属性。
\n\nconst cheerio = require('cheerio');\n\n// HTML 代码示例(通常您通过 HTTP 请求获取)\nconst html = `\n<html>\n<head><title>示例页面</title></head>\n<body>\n <h1>欢迎!</h1>\n <ul>\n <li><a href="https://example.com">链接 1</a></li>\n <li><a href="https://google.com">链接 2</a></li>\n <li class="special"><a href="https://github.com">链接 3</a></li>\n </ul>\n</body>\n</html>\n`;\n\n// 将 HTML 加载到 Cheerio 中\nconst $ = cheerio.load(html);\n\n// 找到所有 <a> 标签并遍历它们\n$('a').each((index, element) => {\n const text = $(element).text(); // 标签内的文本\n const href = $(element).attr('href'); // href 属性的值\n console.log(`${index + 1}. ${text} - ${href}`);\n});\n\n// 结果:\n// 1. 链接 1 - https://example.com\n// 2. 链接 2 - https://google.com\n// 3. 链接 3 - https://github.com\n\n如您所见,语法与 jQuery 非常相似:我们使用 $() 函数来选择元素,然后使用 .text()、.attr()、.each() 等方法来操作它们。
Cheerio 的主要方法和函数
\n\n以下是 Cheerio 的 10 个关键方法的详细解析,包括说明、参数和示例。
\n\n1. cheerio.load(html, options?)
\n作用: 加载 HTML 字符串并返回主函数 $,通过它