Cheerio.js 是一个快速、灵活且优雅的库,用于解析和操作 HTML 和 XML。它借鉴了 jQuery 的核心语法,让我们在服务器端进行类似 jQuery 的操作。Cheerio 主要用于 web 抓取和解析 HTML 内容。
特性
- 证明过的语法:Cheerio 实现了 jQuery 核心功能的子集,去除了 jQuery 中所有与浏览器相关的不一致性和多余部分,展现了其真正简洁的 API。
- 极速性能:由于 Cheerio 使用简单且一致的 DOM 模型,解析、操作和渲染非常高效。
- 高度灵活:Cheerio 使用 parse5 进行 HTML 解析,并可选地使用 htmlparser2,这使得 Cheerio 能够解析几乎所有的 HTML 或 XML 文档。Cheerio 可以在浏览器和服务器环境中运行。
安装
要使用 Cheerio.js,可以通过 npm 安装:
npm install cheerio
基本使用
加载 HTML
与 jQuery 不同,Cheerio 需要明确地加载 HTML 文档。
const cheerio = require('cheerio');
const $ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');
$('h2').addClass('welcome');
console.log($.html());
// 输出: <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>
选择器
加载 HTML 后,可以使用 jQuery 风格的选择器来查找文档中的元素。
const cheerio = require('cheerio');
const $ = cheerio.load('<ul id="fruits"><li class="apple">Apple</li><li class="orange">Orange</li><li class="pear">Pear</li></ul>');
console.log($('.apple').text()); // 输出: Apple
console.log($('ul .pear').attr('class')); // 输出: pear
console.log($('li[class=orange]').html()); // 输出: Orange
渲染
当需要渲染文档时,可以调用 html
方法:
console.log($.root().html());
// 输出:
// <html>
// <head></head>
// <body>
// <ul id="fruits">
// <li class="apple">Apple</li>
// <li class="orange">Orange</li>
// <li class="pear">Pear</li>
// </ul>
// </body>
// </html>
要渲染某个选择的外部 HTML,可以使用 outerHTML
属性:
console.log($('.pear').prop('outerHTML'));
// 输出: <li class="pear">Pear</li>
获取文本内容
可以使用 text
方法获取 Cheerio 对象的文本内容:
const $ = cheerio.load('This is <em>content</em>.');
console.log($('body').text()); // 输出: This is content
结论
Cheerio.js 是一个强大且易用的工具,非常适合用于服务器端的 HTML 解析和操作。它简洁的 API 和高效的性能使其在 web 抓取领域非常流行。通过本文,你应该已经对 Cheerio.js 有了基本的了解,并掌握了如何在项目中使用它进行 HTML 操作。
希望本文对你有所帮助,如果你对 Cheerio.js 感兴趣,不妨尝试一下吧!