加载文档
在本指南中,我们将介绍如何使用 Cheerio 加载文档以及何时 使用不同的加载方法。
如果你熟悉 jQuery,那么这一步对你来说会很陌生。jQuery 操作的是一个由浏览器解析并提供的 DOM。而在 Cheerio 中,我们需要自己向其传入 HTML 文档。
loadBuffer
、stringStream
、decodeStream
和 fromURL
方法
在浏览器环境中不可用。请使用 load
方法解析
HTML 字符串。
load
load 方法是 Cheerio 用来解析 HTML 或 XML 文档的最基本方式。 该方法的参数是一个字符串形式的文档,返回值是一个 Cheerio 对象,然后,你就可以用该对象来遍历和操作文档了。
以下是 load 方法的使用示例:
import * as cheerio from 'cheerio';
const $ = cheerio.load('<h1>Hello, world!</h1>');
console.log($('h1').text());
// Output: Hello, world!
与浏览器环境类似,如果 <html>
、<head>
以及
<body>
元素不存在的话,load
方法会补全这些元素。你可以将 load
方法的第三个
参数设置为 false
来禁止这一行为。
const $ = cheerio.load('<ul id="fruits">...</ul>', null, false);
$.html();
//=> '<ul id="fruits">...</ul>'
有关 load
方法的更多信息,请参阅此
API 文档。
loadBuffer
loadBuffer
方法与 load
方法类似,但它的参数是一个
存储文档内容的 buffer 类型数据结构,而不是字符串。Cheerio 将运行
HTML 编码格式嗅探算法来确定文档的编码格式。
这对于二进制格式存储的文档来说非常 有用,例如
从文件读取或从网络接收数据。
以下是一个如何使用 loadBuffer
方法的示例:
import * as cheerio from 'cheerio';
import * as fs from 'fs';
const buffer = fs.readFileSync('document.html');
const $ = cheerio.loadBuffer(buffer);
console.log($('title').text());
// Output: Hello, world!
有关 loadBuffer
方法的更多信息,请参阅此
API 文档。
stringStream
当从数据流(stream)中加载 HTML 文档且编码格式已知时,你可以
使用 stringStream
方法将其解析为 Cheerio 对象。
import * as cheerio from 'cheerio';
import * as fs from 'fs';
const writeStream = cheerio.stringStream({}, (err, $) => {
if (err) {
// Handle error
}
console.log($('title').text());
// Output: Hello, world!
});
fs.createReadStream('document.html', { encoding: 'utf8' }).pipe(writeStream);
有关 stringStream
方法的更多信息,请参阅
API 文档。
decodeStream
从数据流(stream)中加载 HTML 文档时,如果其编码格式未知,你
可以使用 decodeStream
方法将其解析为 Cheerio 对象。该方法
将运行 HTML 编码格式嗅探算法来确定文档的编码
格式。
以下是一个如何使用 decodeStream
方法的示例:
import * as cheerio from 'cheerio';
import * as fs from 'fs';
const writeStream = cheerio.decodeStream({}, (err, $) => {
if (err) {
// Handle error
}
console.log($('title').text());
// Output: Hello, world!
});
fs.createReadStream('document.html').pipe(writeStream);
有关 decodeStream
方法的更多信息,请参阅此
API 文档。
fromURL
fromURL
方法可以根据 URL 加载文档。该方法
是异步的,因此需要使用 await
(或 then
)语法来访问
返回的 Cheerio 对象。
import * as cheerio from 'cheerio';
const $ = await cheerio.fromURL('https://example.com');
有关 fromURL
方法的更多信息,请参阅此
API 文档。
总结
Cheerio 提供了多种加载 HTML 文档并将其解析为 DOM 结构的方法。这些方法适用于不同的使用场景, 具体取决于 HTML 数据的类型和来源。建议您充分了解 每个方法的用法,然后选择最适合自己需要的方法。