HTML-Parsing in Rust: Bibliotheken und praktische Beispiele

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 die besten Bibliotheken und Codebeispiele



Rust ist eine Systemprogrammiersprache, die zunehmend für Aufgaben im Zusammenhang mit HTML-Parsing eingesetzt wird. Dank hoher Leistung, strenger Typisierung und Speichersicherheit eignet sich Rust hervorragend für die Erstellung schneller und zuverlässiger Webseiten-Parser. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für das HTML-Parsing in Rust, ihre Funktionen und geben praktische Codebeispiele.



Warum Rust für HTML-Parsing?



HTML-Parsing ist eine Aufgabe, die effiziente Speicherverwaltung und strenge Fehlerbehandlung erfordert. Rust bietet:



  • Nullkosten-Abstraktionen — hohe Ausführungsgeschwindigkeit
  • Sichere Speicherverwaltung ohne Garbage Collector
  • Ein leistungsstarkes Typsystem, das Fehler bereits zur Kompilierzeit verhindert
  • Eine aktive Community und viele Bibliotheken für Web Scraping


Wichtige Bibliotheken für HTML-Parsing in Rust



1. scraper — die beliebteste Bibliothek



Die Bibliothek scraper bietet eine benutzerfreundliche API zur Navigation im DOM-Baum mit CSS-Selektoren. Sie basiert auf dem Parser html5ever, der den HTML5-Standards entspricht.



Installation:

[dependencies]scraper = "0.18"


Beispiel: Alle Links von einer Seite extrahieren

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <a href="https://example.com">Example</a> <a href="https://rust-lang.org">Rust</a> </body> </html> "#;

let document = Html::parse_document(html); let selector = Selector::parse("a").unwrap();

for element in document.select(&selector) { if let Some(href) = element.value().attr("href") { println!("Link: {}", href); } }}


2. select.rs — leichter und schneller Selektor



Die Bibliothek select.rs bietet eine minimalistische Schnittstelle für die Arbeit mit CSS-Selektoren. Sie verwendet ebenfalls html5ever unter der Haube, bietet aber einen niedrigschwelligeren Zugriff auf das DOM.



Installation:

[dependencies]select = "0.6"


Beispiel: Alle h2-Überschriften finden

use select::document::Document;use select::predicate::Name;

fn main() { let html = r#" <html> <body> <h2>Überschrift 1</h2> <h2>Überschrift 2</h2> <p>Text</p> </body> </html> "#;

let document = Document::from(html); for node in document.find(Name("h2")) { println!("Überschriftstext: {}", node.text()); }}


3. html5ever — Low-Level-Parser



html5ever ist der Referenz-HTML5-Parser, geschrieben in Rust. Er bildet die Grundlage der meisten anderen Bibliotheken. Wenn Sie maximale Kontrolle über den Parsing-Prozess benötigen, verwenden Sie ihn direkt.



Beispiel: HTML-Tokenisierung

use html5ever::tendril::TendrilSink;use html5ever::parse_document;use markup5ever::{expanded_name, local_name, namespace_url, ns};

fn main() { let html = "<p>Hallo, Rust!</p>"; let dom = parse_document( std::rc::Rc::new(std::cell::RefCell::new(vec![])), Default::default() ) .from_utf8() .read_from(&mut html.as_bytes()) .unwrap();}


Praktisches Beispiel: Parsing einer echten Website



Betrachten wir ein vollständiges Beispiel für das Parsing einer Nachrichten-Website mit scraper und reqw

Empfehlungen