Parsing HTML en Rust : bibliothèques et exemples pratiques

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 meilleures bibliothèques et exemples de code



Rust est un langage de programmation système de plus en plus utilisé pour les tâches liées au parsing HTML. Grâce à ses hautes performances, son typage strict et sa sécurité mémoire, Rust est idéal pour créer des parseurs de pages web rapides et fiables. Dans cet article, nous examinerons les principales bibliothèques pour le parsing HTML en Rust, leurs fonctionnalités et fournirons des exemples de code pratiques.



Pourquoi Rust pour le parsing HTML ?



Le parsing HTML est une tâche qui nécessite une gestion efficace de la mémoire et un traitement rigoureux des erreurs. Rust offre :



  • Des abstractions à coût zéro — une vitesse d'exécution élevée
  • Une gestion sécurisée de la mémoire sans ramasse-miettes
  • Un système de types puissant qui prévient les erreurs à la compilation
  • Une communauté active et de nombreuses bibliothèques pour le web scraping


Principales bibliothèques pour le parsing HTML en Rust



1. scraper — la bibliothèque la plus populaire



La bibliothèque scraper fournit une API pratique pour naviguer dans l'arbre DOM à l'aide de sélecteurs CSS. Elle est construite sur le parseur html5ever, conforme aux normes HTML5.



Installation :

[dependencies]scraper = "0.18"


Exemple : extraction de tous les liens d'une page

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


2. select.rs — sélecteur léger et rapide



La bibliothèque select.rs propose une interface minimaliste pour travailler avec les sélecteurs CSS. Elle utilise également html5ever en interne, mais offre un accès de plus bas niveau au DOM.



Installation :

[dependencies]select = "0.6"


Exemple : recherche de tous les titres h2

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

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

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


3. html5ever — parseur de bas niveau



html5ever est le parseur HTML5 de référence, écrit en Rust. Il est à la base de la plupart des autres bibliothèques. Si vous avez besoin d'un contrôle maximal sur le processus de parsing, utilisez-le directement.



Exemple : tokenisation HTML

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

fn main() { let html = "<p>Bonjour, 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();}


Exemple pratique : parsing d'un site réel



Considérons un exemple complet de parsing d'un site d'actualités en utilisant scraper et reqw

Recommendations