Parsing HTML en Rust : bibliothèques, outils et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Parsing HTML en Rust : aperçu des bibliothèques et exemples pratiques



Rust est un langage de programmation système qui gagne en popularité dans les tâches de web scraping et de parsing HTML grâce à ses performances, sa sécurité mémoire et son typage strict. Dans cet article, nous examinerons les principales bibliothèques pour le parsing HTML en Rust, leurs fonctionnalités et fournirons des exemples de code pour chacune d'elles.



1. Bibliothèque scraper



scraper est l'une des bibliothèques les plus populaires et les plus pratiques pour le parsing HTML en Rust. Elle est construite sur la base de html5ever (parseur HTML5) et fournit une API de haut niveau pour naviguer dans l'arbre DOM à l'aide de sélecteurs CSS.



Installation

[dependencies]scraper = "0.19"


Exemple : récupération des titres d'articles

use scraper::{Html, Selector};

fn main() { let html = r#" <html> <body> <h1 class="title">Premier article</h1> <h1 class="title">Deuxième article</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(" ")); }}


Avantages :

  • API intuitive pour les sélecteurs CSS
  • Prise en charge de toutes les pseudo-classes et combinateurs standards
  • Haute performance
  • Bonne documentation


2. Bibliothèque select.rs



select.rs est une autre bibliothèque puissante pour le parsing HTML, basée sur html5ever. Elle propose une API similaire à jQuery, ce qui la rend particulièrement pratique pour les développeurs familiers avec JavaScript.



Installation

[dependencies]select = "0.6"


Exemple : extraction de liens

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!("Lien : {}", href); } }}


Avantages :

  • Syntaxe similaire à jQuery
  • Prédicats flexibles pour la recherche d'éléments
  • Prise en charge des attributs et du contenu textuel


3. Bibliothèque html5ever



html5ever est un parseur HTML5 de bas niveau écrit en Rust. Il sert de base à de nombreuses autres bibliothèques (y compris scraper et select.rs). Si vous avez besoin d'un contrôle total sur le processus de parsing, c'est un excellent choix.



Installation

[dependencies]html5ever = "0.27"


Exemple : tokenisation HTML

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

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

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

Recommendations