Le web scraping est une technique populaire qui permet de collecter rapidement et efficacement de grandes quantités de données à partir de pages web. En l’absence d’API, le web scraping peut être la meilleure approche.
La vitesse et la sécurité de la mémoire de Rust font de ce langage un outil idéal pour la construction de web scrapers. Rust contient de nombreuses bibliothèques d’analyse et d’extraction de données puissantes, et ses capacités de traitement des erreurs sont pratiques pour une collecte de données Web efficace et fiable.
Web Scraping in Rust (en anglais)
De nombreuses bibliothèques populaires supportent le web scraping en Rust, notamment reqwest, scraper, select et html5ever. La plupart des développeurs Rust combinent les fonctionnalités de reqwest et de scraper pour leurs recherches sur le web.
La bibliothèque reqwest permet d’effectuer des requêtes HTTP auprès de serveurs web. Reqwest s’appuie sur la bibliothèque Rust intégrée hyper tout en offrant une API de haut niveau pour les fonctionnalités HTTP standard.
Scraper est une puissante bibliothèque de scraping web qui analyse les documents HTML et XML et extrait des données à l’aide de sélecteurs CSS et d’expressions XPath.
Après avoir créé un nouveau projet Rust avec l’option cargo new ajoutez la commande reqwest et grattoir crates dans la section des dépendances de votre cargo.toml fichier :
[dependencies]
reqwest = {version = "0.11", features = ["blocking"]}
scraper = "0.12.0"
Vous utiliserez reqwest pour envoyer des requêtes HTTP et scraper pour l’analyse.
Récupérer des pages web avec Reqwest
Vous allez envoyer une requête pour le contenu d’une page web avant de l’analyser pour en extraire des données spécifiques.
Vous pouvez envoyer une requête GET et récupérer la source HTML d’une page à l’aide de la commande texte fonction sur le obtenir fonction de la reqwest bibliothèque :
fn retrieve_html() -> String {
let response = get("https://news.ycombinator.com").unwrap().text().unwrap();
return response;
}
Le obtenir envoie la requête à la page web, et la fonction texte renvoie le texte du code HTML.
Analyse du HTML avec Scraper
Le récupérer_html renvoie le texte de l’HTML, et vous devrez analyser le texte HTML pour récupérer les données spécifiques dont vous avez besoin.
Scraper fournit des fonctionnalités permettant d’interagir avec le HTML dans le format Html et Sélecteur modules. Les modules Html fournit la fonctionnalité d’analyse du document, et le module Sélecteur Le module Selector permet de sélectionner des éléments spécifiques dans le code HTML.
Voici comment récupérer tous les titres d’une page :
use scraper::{Html, Selector};
fn main() {
let response = reqwest::blocking::get(
"https://news.ycombinator.com/").unwrap().text().unwrap();
// parse the HTML document
let doc_body = Html::parse_document(&response);
// select the elements with titleline class
let title = Selector::parse(".titleline").unwrap();
for title in doc_body.select(&title) {
let titles = title.text().collect::<Vec<_>>();
println!("{}", titles[0])
}
}
Le parse_document de la fonction Html analyse le texte HTML, et le module Parse fonction de la Sélecteur sélectionne les éléments avec le sélecteur CSS spécifié (dans ce cas, le sélecteur ligne de titre ).
Le pour parcourt ces éléments et imprime le premier bloc de texte de chacun d’entre eux.
Voici le résultat de l’opération :
Sélectionner des attributs avec Scraper
Pour sélectionner la valeur d’un attribut, récupérez les éléments requis comme précédemment et utilisez la commande attr de l’instance de valeur de la balise :
use reqwest::blocking::get;
use scraper::{Html, Selector};
fn main() {
let response = get("https://news.ycombinator.com").unwrap().text().unwrap();
let html_doc = Html::parse_document(&response);
let class_selector = Selector::parse(".titleline").unwrap();
for element in html_doc.select(&class_selector) {
let link_selector = Selector::parse("a").unwrap();
for link in element.select(&link_selector) {
if let Some(href) = link.value().attr("href") {
println!("{}", href);
}
}
}
}
Après avoir sélectionné des éléments avec la méthode ligne de titre à l’aide de la classe parse la fonction pour les traverse. À l’intérieur de la boucle, le code va chercher a et sélectionne l’étiquette href avec l’attribut attr fonction.
Le principal imprime ces liens, avec un résultat comme celui-ci :
Vous pouvez construire des applications web sophistiquées en Rust
Récemment, Rust a été de plus en plus adopté comme langage pour le développement web, du développement d’applications front-end au développement d’applications côté serveur.
Vous pouvez utiliser l’assemblage web pour créer des applications web complètes avec des bibliothèques comme Yew et Percy ou créer des applications côté serveur avec Actix, Rocket et la multitude de bibliothèques de l’écosystème Rust qui fournissent des fonctionnalités pour la création d’applications web.
