跳到主要内容

Cheerio 1.0 版本已正式发布了,主打功能全面 🔋

· 阅读需 5 分钟
Felix Boehm
Maintainer of Cheerio

Cheerio 1.0 版本已正式发布了!在 1.0 初次候选版本(release candidate)发布之后, 历经 7 年、12 次迭代,最终迎来了 Cheerio 1.0 正式版的发布。 这个版本的主题是 "功能全面(batteries included)",现在 开箱即支持常见的使用情况。

那么,接下来就开始阅读下面的内容,了解有哪些新功能、有哪些变化,以及 如何升级吧!

新网站和文档

自上个版本发布以来,我们上线了 Cheerio 的新网站和文档。 新网站提供了详细的使用指南和 API 文档,让您全面掌握 Cheerio。 传送门 cheerio.js.org

加载文档的新方法

Cheerio 加载文档的方式已进行了改进。Cheerio 现在支持多种加载方法, 每种方法用以应对不同的使用情况:

  • load: 解析 HTML 或 XML 字符串的经典方法。
  • loadBuffer: 可处理二进制数据,自动检测文档的 编码。
  • stringStreamdecodeStream: 直接从流(streams)中解析 HTML。
  • fromURL: 从 URL 抓取并解析 HTML,一站式搞定。

如需深入学习这些方法,请参考 加载文档 教程。

简化数据的提取

新的 extract 方法能您从 HTML 文档中提取数据 并将其存储到对象中。例如,从 GitHub 获取 Cheerio 的最新版本, 然后从版本列表页面提取发布日期和发布说明, 现在就可以更简单的实现了,代码如下:

import * as cheerio from 'cheerio';

const $ = await cheerio.fromURL(
'https://github.com/cheeriojs/cheerio/releases',
);
const data = $.extract({
releases: [
{
// 首先,我们选取包含每个版本(release)的独立区块。
selector: 'section',
// 然后,从每个区块中提取版本的 date、name 和 notes。
value: {
// 此处的每个选择器都在所选择元素的上下文中执行。
name: 'h2',
date: {
selector: 'relative-time',
// 实际的版本发布日期(即 date)存储在 `datetime` 属性中。
value: 'datetime',
},
notes: {
selector: '.markdown-body',
// 我们需要提取的是所选取元素的 HTML 内容。
value: 'innerHTML',
},
},
},
],
});

有关该方法的所有可用参数的详细信息,请参阅 提取数据 指南。

重大改变和升级指南

Cheerio 1.0 引入了几项重大改变,其中最显著的是:

  • 支持 NodeJS 18.17 或更高版本。

  • 简化了导入(Import)路径。例如 cheerio/slim 替代了 cheerio/lib/slim

  • 默认的 Cheerio 实例和一些静态方法(以前已被标记为不推荐)已被删除。

    以前,可以写出这样的代码:

    import cheerio, { html } from 'cheerio';

    html(cheerio('<test></test>')); // ~ '<test></test>' -- NO LONGER WORKS

    现在务必首先加载文档:

    import * as cheerio from 'cheerio';

    cheerio.load('<test></test>').html();
  • htmlparser2 的参数现在只位于 xml 配置项下:

    const $ = cheerio.load('<html>', {
    xml: {
    withStartIndices: true,
    },
    });
  • 以前由 Cheerio 二次导出(re-exported)的节点(Node)类型现在必须直接 从 domhandler 导入(import)。

有关的完整变更列表,请查阅 更新日志

升级到 Cheerio 1.0

要升级到 Cheerio 1.0,只需运行一下命令:

npm install cheerio@latest

参与进来

探索新功能,告诉我们您的想法!如果遇到问题了? 请在在我们的 GitHub issue tracker 上报告。有 改进意见?欢迎提交 PR(Pull requests) :)

致谢

感谢 @jugglinmike 启动 Cheerio 1.0 的开发,并感谢所有帮助我们完成此版本的贡献者们。 没有你们,我们不可能成功。

感谢我们的 赞助商和支持者们 支持 Cheerio 的开发。如果您在工作中使用到 Cheerio,请考虑让 您的公司支持我们!

最后,感谢您使用 Cheerio 🙇🙇‍♀️