5月29日 00:50

Cheerio 加载 HTML 有哪几种方式?

核心方法是 cheerio.load(html, options),支持三种输入源:HTML 字符串、fs.readFileSync 读取的文件内容、Buffer。第二个参数控制解析行为:xmlMode 用于 XML 文档,decodeEntities 控制是否解码 HTML 实体(如 & → &),withDomLvl1 决定是否遵循 DOM Level1 规范。对大文件可用流式读取拼接后再 load。

追问

xmlMode 什么时候必须开启? 解析 XML/RSS/Atom feed 时必须开启,否则标签大小写会被统一转小写,XML 的自闭合标签也会被错误处理。

decodeEntities 设为 false 有什么用? 保留原始 HTML 实体不解码,适合需要原样输出 HTML 的场景,如内容编辑器。默认 true 会把 & 转成 &。

能直接加载 URL 吗? 不能。Cheerio 是纯解析库,没有网络能力。需先用 axios/fetch 获取 HTML 字符串,再传入 load()。

cheerio.load() 返回的 $ 是什么? 返回一个函数,既可当选择器 $(selector) 使用,也挂载了 .html()、.xml() 等静态方法,本质是包装后的 DOM 操作入口。

Buffer 输入和字符串输入有区别吗? 功能一致,Buffer 会被内部自动转字符串。用 Buffer 可避免编码问题,尤其处理非 UTF-8 内容时更安全。

写段代码

javascript
const cheerio = require('cheerio'); const $ = cheerio.load('<root><item>值</item></root>', { xmlMode: true, decodeEntities: false }); console.log($('item').text()); // 值
标签:NodeJSCheerio