#html #parser #dom #pest #json #html-xml

html_parser

一个简单且通用的html/xhtml解析器

13个不稳定版本

0.7.0 2023年5月11日
0.6.3 2022年4月21日
0.6.2 2020年12月21日
0.5.0 2020年11月28日
0.1.0 2020年5月20日

#321解析器实现 中排名

Download history 2403/week @ 2024-03-14 2772/week @ 2024-03-21 3189/week @ 2024-03-28 2726/week @ 2024-04-04 2632/week @ 2024-04-11 2796/week @ 2024-04-18 2866/week @ 2024-04-25 2899/week @ 2024-05-02 2719/week @ 2024-05-09 2406/week @ 2024-05-16 2481/week @ 2024-05-23 4028/week @ 2024-05-30 3000/week @ 2024-06-06 2781/week @ 2024-06-13 2594/week @ 2024-06-20 2111/week @ 2024-06-27

11,233 每月下载量
用于 57 个crate (23个直接使用)

MIT 协议

55KB
591

Html解析器

一个简单且通用的html/xhtml解析器库/bin,使用Pest

功能

  • 解析html & xhtml(不处理xml处理指令)
  • 解析html文档
  • 解析html片段
  • 解析空文档
  • 使用相同的api解析文档和片段
  • 解析自定义、非标准的元素;<cat/><Cat/><C4-t/>
  • 移除注释
  • 移除悬空元素
  • 遍历DOM中的所有节点三次

它不是什么

  • 它不是一个高性能的浏览器级解析器
  • 它不适用于html验证
  • 它不是一个包含元素选择或DOM操作的解析器

如果你的需求符合上述任何一项,那么你可能需要查找以下crate之一

示例bin

解析html文件

html_parser index.html

解析stdin并输出格式化结果

curl <website> | html_parser -p

示例lib

解析html文档

    use html_parser::Dom;

    fn main() {
        let html = r#"
            <!doctype html>
            <html lang="en">
                <head>
                    <meta charset="utf-8">
                    <title>Html parser</title>
                </head>
                <body>
                    <h1 id="a" class="b c">Hello world</h1>
                    </h1> <!-- comments & dangling elements are ignored -->
                </body>
            </html>"#;

        assert!(Dom::parse(html).is_ok());
    }

解析html片段

    use html_parser::Dom;

    fn main() {
        let html = "<div id=cat />";
        assert!(Dom::parse(html).is_ok());
    }

输出为json

    use html_parser::{Dom, Result};

    fn main() -> Result<()> {
        let html = "<div id=cat />";
        let json = Dom::parse(html)?.to_json_pretty()?;
        println!("{}", json);
        Ok(())
    }

依赖

~2.5–3.5MB
~72K SLoC