Lorsqu'une API ne suffit pas, vous pouvez toujours recourir au scraping HTML, et Rust peut vous aider.

Le scraping Web est une technique populaire pour collecter rapidement et efficacement de grandes quantités de données à partir de pages Web. En l'absence d'API, le scraping Web peut être la meilleure approche.

La vitesse et la sécurité de la mémoire de Rust en font le langage idéal pour créer des grattoirs Web. Rust abrite de nombreuses bibliothèques d'analyse et d'extraction de données puissantes, et ses solides capacités de gestion des erreurs sont pratiques pour une collecte de données Web efficace et fiable.

Web Scraping dans Rust

De nombreuses bibliothèques populaires prennent en charge le web scraping dans Rust, y compris demande, grattoir, sélectionner, et html5ever. La plupart des développeurs Rust combinent les fonctionnalités de reqwest et de scraper pour leur scraping Web.

La bibliothèque reqwest fournit des fonctionnalités permettant de faire des requêtes HTTP aux serveurs Web. Reqwest est construit sur la base intégrée de Rust

instagram viewer
hyper crate tout en fournissant une API de haut niveau pour les fonctionnalités HTTP standard.

Scraper est une puissante bibliothèque de grattage Web qui analyse les documents HTML et XML et extrait des données à l'aide de sélecteurs CSS et les expressions XPath.

Après avoir créé un nouveau projet Rust avec le cargaison nouveau commande, ajoutez la demande et grattoir caisses à la section des dépendances de votre cargo.toml déposer:

[dépendances]
demande = {version = "0.11", caractéristiques = ["blocage"]}
grattoir = "0.12.0"

Vous utiliserez demande pour envoyer des requêtes HTTP et grattoir pour l'analyse.

Récupérer des pages Web avec Reqwest

Vous enverrez une demande pour le contenu d'une page Web avant de l'analyser pour récupérer des données spécifiques.

Vous pouvez envoyer une requête GET et récupérer le source HTML d'une page à l'aide de la texte fonction sur le obtenir fonction de la demande bibliothèque:

fnrécupérer_html() -> Chaîne {
laisser réponse = obtenir(" https://news.ycombinator.com").unwrap().text().unwrap();
retour réponse;
}

Le obtenir la fonction envoie la demande à la page Web, et la texte La fonction renvoie le texte du HTML.

Analyser HTML avec Scraper

Le récupérer_html La fonction renvoie le texte du 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 pour interagir avec HTML dans le HTML et Sélecteur modules. Le HTML module fournit des fonctionnalités pour analyser le document, et le Sélecteur Le module fournit des fonctionnalités pour sélectionner des éléments spécifiques à partir du HTML.

Voici comment récupérer tous les titres d'une page :

utiliser scraper ::{Html, Sélecteur} ;

fnprincipal() {
laisser réponse = reqwest:: blocage:: get(
" https://news.ycombinator.com/").unwrap().text().unwrap();

// analyse le document HTML
laisser doc_body = Html:: parse_document(&response);

// sélectionne les éléments avec la classe titleline
laisser titre = Sélecteur:: parse(".titleline").déballer();

pour titre dans doc_body.select(&titre) {
laisser titres = titre.text().collect ::<Vec<_>>();
imprimez !("{}", titres[0])
}
}

Le analyse_document fonction de la HTML module analyse le texte HTML, et le Analyser fonction de la Sélecteur module sélectionne les éléments avec le sélecteur CSS spécifié (dans ce cas, le titre classe).

Le pour loop parcourt ces éléments et imprime le premier bloc de texte de chacun.

Voici le résultat de l'opération :

Sélection d'attributs avec scraper

Pour sélectionner une valeur d'attribut, récupérez les éléments requis comme précédemment et utilisez la attribut méthode de l'instance de valeur de balise :

utiliser reqwest:: blocage:: get;
utiliser scraper ::{Html, Sélecteur} ;

fnprincipal() {
laisser réponse = obtenir(" https://news.ycombinator.com").unwrap().text().unwrap();
laisser html_doc = Html:: parse_document(&response);
laisser class_selector = Sélecteur:: parse(".titleline").déballer();

pour élément dans html_doc.select(&class_selector) {
laisser link_selector = Sélecteur:: parse("un").déballer();

pour lien dans élément.select(&link_selector) {
silaisserQuelques(href) = lien.valeur().attr("href") {
imprimez !("{}", href);
}
}
}
}

Après avoir sélectionné des éléments avec la titre classe à l'aide de analyser fonction, la pour boucle les traverse. À l'intérieur de la boucle, le code récupère ensuite un balises et sélectionne les href attribut avec le attribut fonction.

Le principal fonction imprime ces liens, avec un résultat comme celui-ci :

Vous pouvez créer des applications Web sophistiquées dans Rust

Récemment, Rust a été adopté en tant que langage pour le développement Web, du développement d'applications frontales au développement d'applications côté serveur.

Vous pouvez tirer parti de l'assemblage Web pour créer des applications Web complètes avec des bibliothèques telles que Yew et Percy ou créer côté serveur. applications avec Actix, Rocket et l'hôte de bibliothèques de l'écosystème Rust qui fournissent des fonctionnalités pour la création de sites Web applications.