13 个版本 (6 个稳定版)

1.2.1 2024 年 3 月 11 日
1.2.0 2023 年 9 月 13 日
1.1.1 2023 年 7 月 31 日
0.4.0 2023 年 4 月 25 日
0.1.0 2019 年 11 月 26 日

#2912解析器实现

Download history 1807/week @ 2024-04-23 3264/week @ 2024-04-30 4331/week @ 2024-05-07 3823/week @ 2024-05-14 3831/week @ 2024-05-21 3543/week @ 2024-05-28 4192/week @ 2024-06-04 5464/week @ 2024-06-11 6042/week @ 2024-06-18 6592/week @ 2024-06-25 5932/week @ 2024-07-02 5441/week @ 2024-07-09 4634/week @ 2024-07-16 4351/week @ 2024-07-23 4261/week @ 2024-07-30 4065/week @ 2024-08-06

每月 17,791 次下载
51 包中使用(36 个直接使用)

BSD-3-Clause

545KB
11K SLoC

LOL HTML

The logo is generated from https://openmoji.org/data/color/svg/1F602.svg by Emily Jäger which is licensed under CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)

Low Output Latency streaming HTML rewriter/parser with CSS-selector based API.

它旨在以最小缓冲区动态修改 HTML。它可以快速处理非常大的文档,并在内存资源有限的环境中运行。更多详细信息请参阅 博客文章

该包作为 Cloudflare Workers HTML 重写功能的后端,但可以作为具有便捷 API 的独立库使用,适用于各种 HTML 重写/分析任务。

文档

https://docs.rs/lol_html/

其他编程语言的绑定

  • C
  • Lua
  • Go (非官方,非 Cloudflare 提供)
  • Ruby (非官方,非 Cloudflare 提供)

示例

重写不安全的超链接

use lol_html::{element, HtmlRewriter, Settings};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut output = vec![];

    let mut rewriter = HtmlRewriter::new(
        Settings {
            element_content_handlers: vec![
                element!("a[href]", |el| {
                    let href = el
                        .get_attribute("href")
                        .expect("href was required")
                        .replace("http:", "https:");

                    el.set_attribute("href", &href)?;

                    Ok(())
                })
            ],
            ..Settings::default()
        },
        |c: &[u8]| output.extend_from_slice(c)
    );

    rewriter.write(b"<div><a href=")?;
    rewriter.write(b"http://example.com>")?;
    rewriter.write(b"</a></div>")?;
    rewriter.end()?;

    assert_eq!(
        String::from_utf8(output)?,
        r#"<div><a href="https://example.com"></a></div>"#
    );
    Ok(())
}

许可证

BSD 许可。有关详细信息,请参阅 LICENSE 文件。

依赖关系

~7.5MB
~195K SLoC