17个版本

0.8.0 2020年11月7日
0.7.5 2019年12月25日
0.7.4 2019年10月1日
0.6.0 2019年2月12日
0.3.0 2018年12月12日

#2387解析器实现


5 crates 中使用

MIT 许可证

19KB
507 代码行

unhtml

Stable Test Rust Docs Crate version Download License: MIT

在crate unhtml 中有两个 trait

  • FromHtml

FromHtml 唯一需要关注的方法是 fn from_html(html: &str) -> Result<Self, Error>,此方法为所有实现了 FromStr<E, T> 的类型实现

impl<E, T> FromHtml for T
    where E: failure::Fail,
          T: FromStr<Err=E> {
    fn from_html(html: &str) -> Result<Self, Error> {
        Ok(T::from_str(html.trim())?)
    }
}

您可以使用crate unhtml_derive 自动为 struct 实现 FromHtml Crate版本

  • VecFromHtml

VecFromHtml 默认为 Vec<T> where T: FromHtml 实现

impl<T> VecFromHtml for Vec<T>
    where T: FromHtml {
    type Elem = T;
}

因为默认情况下,u8 已实现 FromHtml

use unhtml::scraper::Html;
use unhtml::VecFromHtml;
let html = Html::parse_fragment(r#"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="test">
        <a href="1"></a>
        <a href="2"></a>
        <a href="3"></a>
    </div>
</body>
</html>
"#);
let results = Vec::<u8>::from_attr("#test > a", "href", html.root_element()).unwrap();
assert_eq!(1u8, results[0]);
assert_eq!(2u8, results[1]);
assert_eq!(3u8, results[2]);

依赖项

~3–9MB
~79K SLoC