HTML-Parsing in Rust: Bibliotheken, Werkzeuge und Codebeispiele

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 Bibliotheken und praktische Beispiele



Rust ist eine systemnahe Programmiersprache, die aufgrund ihrer Leistung, Speichersicherheit und strengen Typisierung bei Aufgaben des Web-Scrapings und HTML-Parsings immer beliebter wird. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für HTML-Parsing in Rust, ihre Funktionen und geben Codebeispiele für jede von ihnen.



1. Bibliothek scraper



scraper ist eine der beliebtesten und benutzerfreundlichsten Bibliotheken für HTML-Parsing in Rust. Sie basiert auf html5ever (HTML5-Parser) und bietet eine hochwertige API zur Navigation im DOM-Baum mit CSS-Selektoren.



Installation

[dependencies]scraper = "0.19"


Beispiel: Abrufen von Artikelüberschriften

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <h1 class="title">Erster Artikel</h1> <h1 class="title">Zweiter Artikel</h1> </body> </html> "#;

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

for element in document.select(&selector) { println!("{}", element.text().collect::<Vec<_>>().join(" ")); }}


Vorteile:

  • Intuitive API für CSS-Selektoren
  • Unterstützung aller standardmäßigen Pseudoklassen und Kombinatoren
  • Hohe Leistung
  • Gute Dokumentation


2. Bibliothek select.rs



select.rs ist eine weitere leistungsstarke Bibliothek für HTML-Parsing, die auf html5ever basiert. Sie bietet eine jQuery-ähnliche API, was sie besonders praktisch für Entwickler macht, die mit JavaScript vertraut sind.



Installation

[dependencies]select = "0.6"


Beispiel: Extrahieren von Links

use select::document::Document;use select::predicate::{Name, Class};

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

let document = Document::from(html);

for node in document.find(Class("link")) { if let Some(href) = node.attr("href") { println!("Link: {}", href); } }}


Vorteile:

  • jQuery-ähnliche Syntax
  • Flexible Prädikate zur Elementsuche
  • Unterstützung von Attributen und Textinhalten


3. Bibliothek html5ever



html5ever ist ein Low-Level-HTML5-Parser, der in Rust geschrieben ist. Er bildet die Grundlage für viele andere Bibliotheken (einschließlich scraper und select.rs). Wenn Sie die vollständige Kontrolle über den Parsing-Prozess benötigen, ist dies eine ausgezeichnete Wahl.



Installation

[dependencies]html5ever = "0.27"


Beispiel: Tokenisierung von HTML

use html5ever::tendril::TendrilSink;use html5ever::parse_document;use html5ever::rcdom::{RcDom, Handle, NodeData};

fn main() { let html = "<p>Hallo, Rust!</p>"; let dom = parse_document(RcDom::default(), Default::default()) .from_utf8() .read_from(&mut html.as_bytes()) .unwrap();

// DOM-Baum durchlaufen fn walk(node: &Handle, depth: usize) { match node.data { NodeData::Text { ref contents } => { let text = contents.borrow(); println!("{:indent$}Text: {}", "", text, indent = depth * 2); } NodeData::Element { ref name,

Empfehlungen