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, Aussi dans la bibliothèque
Cryptographie en PHP : chiffrement et hachage (guide pratique)
Swift Package Manager pour Swift : guide complet avec exemples
Mise en cache en C++ : Bibliothèque Cache++
Planificateur de tâches Rust : aperçu des bibliothèques et exemples de code
Surveillance Node.js : outils et bibliothèques pour l'observabilité