Rust:
HTML Parsen

Hoe doe je dat:

Om HTML in Rust te parsen, wil je waarschijnlijk een crate zoals scraper of select gebruiken. Hier is een snel voorbeeld met scraper:

use scraper::{Html, Selector};

fn main() {
    // De HTML invoer als een string
    let html = r#"
        <html>
            <body>
                <p>Hallo, wereld!</p>
            </body>
        </html>
    "#;

    // Parse de HTML string
    let document = Html::parse_document(html);
    
    // Creëer een selector om alle <p> tags te vinden
    let selector = Selector::parse("p").unwrap();

    // Itereer over elementen die overeenkomen met de selector
    voor element in document.select(&selector) {
        // Print de tekst binnen elke <p> tag
        println!("{}", element.text().collect::<Vec<_>>().concat());
    }
}

Output:

Hallo, wereld!

Diepere duik

Vroeger was het parsen van HTML een rommelige onderneming. Bibliotheken verschilden, standaarden waren voortdurend in beweging en de aanpak varieerde per taal. Vandaag de dag biedt Rust’s ecosysteem robuuste crates voor het parsen, zoals scraper die steunt op de html5ever en selectors bibliotheken. html5ever is bijzonder interessant; het is gebaseerd op het HTML-parseringsalgoritme gespecificeerd door de WHATWG, waardoor het gelijk staat aan hoe moderne browsers HTML parsen.

Alternatieven voor scraper zijn onder andere select, dat vergelijkbare functionaliteit, maar andere ergonomie biedt. Laagniveau-parsing is mogelijk met html5ever zelf als je meer controle nodig hebt.

Vaak maakt het parsen van HTML deel uit van webscraping, waarbij je gegevens van websites extraheert. Het is belangrijk (en ethisch) om de robots.txt en de servicevoorwaarden van een site te respecteren bij het scrapen.

Wat implementatie betreft, onthoud altijd dat parsen slechts het beginpunt is. Sanitisatie en validatie zijn essentieel om beveiligingsproblemen zoals XSS (Cross-Site Scripting) aanvallen te voorkomen, vooral als je van plan bent om geparseerde gegevens weer te geven of op te slaan.

Zie ook