dom_query 0.27.0

HTML querying and manipulation with CSS selectors
Documentation
use std::error::Error;
use std::sync::mpsc::channel;
use std::thread;

use dom_query::Document;

fn main() -> Result<(), Box<dyn Error>> {
    let (tx, rx) = channel();
    thread::spawn(move || {
        let html = include_str!("../test-pages/hacker_news.html");
        let document = Document::from(html);
        tx.send(document).unwrap();
    });

    let document = rx.recv().unwrap();

    for news in document.select("tr.athing:has(a[href][id])").iter() {
        let link = news.select(".title  a.storylink");
        let source = news.select(".sitebit a");
        println!("{:<6} => {}", "title", link.text());
        println!("{:<6} => {}", "link", link.attr("href").unwrap_or_default());
        println!("{:<6} => {}\n", "source", source.text());
    }

    Ok(())
}