HTML-Parsing in Rust: Bibliotheken und Beispiele für Web Scraping

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTML-Parsing in Rust: Überblick über Werkzeuge und praktische Beispiele



Rust ist eine moderne Systemprogrammiersprache, die zunehmend für die Erstellung leistungsstarker Web-Scraper und Parser eingesetzt wird. Dank des strengen Typsystems, der Speichersicherheit und der asynchronen Fähigkeiten eignet sich Rust ideal für Aufgaben, bei denen Daten schnell und zuverlässig aus HTML-Dokumenten extrahiert werden müssen. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für das HTML-Parsing in Rust, ihre Besonderheiten und geben funktionierende Codebeispiele.



Wichtige Bibliotheken für HTML-Parsing in Rust



Das Rust-Ökosystem bietet mehrere ausgereifte Lösungen für die Arbeit mit HTML. Die beliebtesten sind:



  • scraper — eine hochrangige Bibliothek mit Unterstützung für CSS-Selektoren, aufbauend auf select.rs und html5ever.
  • select.rs — eine Bibliothek zum Extrahieren von Daten aus dem DOM mithilfe von CSS-Selektoren.
  • html5ever — ein Low-Level-Parser, der dem HTML5-Standard entspricht (wird intern in Servo verwendet).
  • quick-xml — ein schneller XML/HTML-Parser auf Basis von Streaming-Lesen, geeignet für einfache Aufgaben.


Für die meisten Web-Scraping-Aufgaben wird scraper empfohlen, da es eine benutzerfreundliche API und aktive Community-Unterstützung bietet.



Installation und Einrichtung



Fügen Sie die Abhängigkeit in die Datei Cargo.toml ein:



[dependencies]scraper = "0.20"reqwest = { version = "0.12", features = ["blocking"] }


Die Bibliothek reqwest wird für HTTP-Anfragen verwendet. Wenn Sie einen asynchronen Ansatz bevorzugen, verwenden Sie reqwest mit tokio.



Beispiel 1: Extrahieren von Seitenüberschriften



Schreiben wir einen einfachen Parser, der den <title>-Titel und alle <h1>-Überschriften einer Webseite extrahiert:



use scraper::{Html, Selector};

fn main() -> Result<(), Box<dyn std::error::Error>> { let html = r#" <html> <head><title>Beispielseite</title></head> <body> <h1>Erste Überschrift</h1> <h1>Zweite Überschrift</h1> </body> </html> "#;

let document = Html::parse_document(html);

// Titel extrahieren let title_selector = Selector::parse("title").unwrap(); if let Some(title_element) = document.select(&title_selector).next() { let title_text = title_element.text().collect::().join(""); println!("Seitentitel: {}", title_text); }

// Alle h1 extrahieren let h1_selector = Selector::parse("h1").unwrap(); for element in document.select(&h1_selector) { let text = element.text().collect::().join(""); println!("H1: {}", text); }

Ok(())}


In diesem Beispiel parsen wir statisches HTML. Für echte Websites wird HTML normalerweise über eine HTTP-Anfrage abgerufen.



Beispiel 2: Parsen einer echten Website mit HTTP-Anfrage



Jetzt verwenden wir reqwest, um eine Seite zu laden und Links zu extrahieren:



use scraper::{Html, Selector};

fn main() -> Result<(), Box<dyn std::error::Error>> { let response = reqwest::blocking::get("https://www.rust-lang.org")?; let html = response.text()?;

let document = Html::parse_document(&html); let link_selector = Selector::parse("a[href]").unwrap();

println!("Links auf der Seite:"); for link in document.select(&link_selector) { if let Some(href) = link.value().attr("href") { let text = link.text().collect::(); println!(" Text: '{}' -> URL: {}", text.trim(), href); } }

Ok(())}


Beachten Sie die Methode attr("href") — sie ermöglicht das Abrufen von W

Empfehlungen