htmler is a html parsing library with css selectors.

This is a fork of scraper, and provides higher-level encapsulation and a more consistent interface.

Examples

Parsing a document/fragment

```rs use htmler::Html;

let html = r#" Hello, world!

Hello, world!

"#;

let document = Html::parsedocument(html); let fragment = Html::parsefragment("

Hello, world!

"); ```

Selecting elements

```rs use htmler::{Html, Selector};

let html = r#"

"#;

let fragment = Html::parse_fragment(html); let selector = Selector::new("li");

for element in fragment.select(&selector) { assert_eq!("li", element.value().name()); } ```

Selecting descendent elements

```rs use htmler::{Html, Selector};

let html = r#"

"#;

let fragment = Html::parsefragment(html); let ulselector = Selector::new("ul"); let li_selector = Selector::new("li");

let ul = fragment.select(&ulselector).next().unwrap(); for element in ul.select(&liselector) { assert_eq!("li", element.value().name()); } ```

Accessing element attributes

```rs use htmler::{Html, Selector};

let fragment = Html::parse_fragment(r#""#); let selector = Selector::new(r#"input[name="foo"]"#);

let input = fragment.select(&selector).next().unwrap(); asserteq!("bar", input.getattribute("value")); ```

Serializing HTML and inner HTML

```rs use htmler::{Html, Selector};

let fragment = Html::parse_fragment("

Hello, world!

"); let selector = Selector::new("h1");

let h1 = fragment.select(&selector).next().unwrap();

asserteq!("

Hello, world!

", h1.html()); asserteq!("Hello, world!", h1.inner_html()); ```

Accessing descendent text

```rs use htmler::{Html, Selector};

let fragment = Html::parse_fragment("

Hello, world!

"); let selector = Selector::new("h1");

let h1 = fragment.select(&selector).next().unwrap(); let text = h1.text().collect::>();

assert_eq!(vec!["Hello, ", "world!"], text); ```