web-parser 0.1.3

This website parser library allows asynchronous search, fetching and extracting data from web-pages in multiple formats.
Documentation
use web_parser::prelude::*;
#[cfg(feature = "search")]
use macron::path;

#[tokio::main]
async fn main() -> Result<()> {
    // _____ WEB SEARCH (feature 'search'): _____
    
    #[cfg(feature = "search")]
    {
        let chrome_path = path!("bin/chromedriver/chromedriver.exe");
        let session_path = path!("%/ChromeDriver/WebSearch");
        
        // start search engine:
        let mut engine = SearchEngine::<Duck>::new(
            chrome_path,
            Some(session_path),
            false,
        ).await?;

        println!("Searching results..");

        // send search query:
        let results = engine.search(
            "Rust (programming language)",  // query
            &["support.google.com", "youtube.com"],  // black list
            1000  // sleep in millis
        ).await;
        
        // handle search results:
        match results {
            Ok(cites) => {
                println!("Result cites list: {:#?}", cites.get_urls());

                /*
                println!("Reading result pages..");
                let contents = cites.read(
                    5,  // cites count to read
                    &[  // tag name black list
                        "header", "footer", "style", "script", "noscript",
                        "iframe", "button", "img", "svg"
                    ]
                ).await?;

                println!("Results: {contents:#?}");
                */
            }
            Err(e) => eprintln!("Search error: {e}")
        }

        // stop search engine:
        engine.stop().await?;
    }

    /*
    // _____ READ PAGE AS HTML DOCUMENT: _____
    
    // read website page:
    let mut doc = Document::read("https://example.com/", User::random()).await?;

    // select 'lang' attribute:
    let html = doc.select("html")?.expect("No elements found");
    let lang = html.attr("lang").unwrap_or("en");
    println!("Language: {lang}");
    
    // select title:
    let title = doc.select("h1")?.expect("No elements found");
    println!("Title: '{}'", title.text());

    // select descriptions:
    let mut descrs = doc.select_all("p")?.expect("No elements found");
    while let Some(descr) = descrs.next() {
        println!("Description: '{}'", descr.text())
    }

    
    // _____ READ PAGE AS SIMPLE TEXT: _______

    let text: String = Document::text("https://example.com/", User::random()).await?;
    println!("Text: {text}");


    // _____ READ PAGE AS JSON: ______________

    let json: serde_json::Value = Document::json("https://example.com/", User::random()).await?.expect("Failed to parse JSON");
    println!("Json: {json}");
    */

    Ok(())
}