Comment gratter un site Web et récupérer des données à l’aide de Rust

Publié le 20 mai 2023 par Mycamer

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.

UTILISEZ LA VIDÉO DU JOURFAITES DÉFILER POUR CONTINUER AVEC LE CONTENU

Web Scraping dans Rust

De nombreuses bibliothèques populaires prennent en charge le web scraping dans Rust, y compris demande, grattoir, sélectionneret 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 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:

 [dependencies]
reqwest = {version = "0.11", features = ["blocking"]}
scraper = "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 requête sur 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:

 fn retrieve_html() -> String {
    let response = get("https://news.ycombinator.com").unwrap().text().unwrap();
    return response;
}

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 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 :

 use scraper::{Html, Selector};

fn main() {
    let response = reqwest::blocking::get(
        "https://news.ycombinator.com/").unwrap().text().unwrap();

    
    let doc_body = Html::parse_document(&response);

    
    let title = Selector::parse(".titleline").unwrap();
        
    for title in doc_body.select(&title) {
        let titles = title.text().collect::<Vec<_>>();
        println!("{}", titles[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 :

 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 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 des applications côté serveur avec Actix, Rocket et l’hôte de bibliothèques de l’écosystème Rust qui fournissent des fonctionnalités pour créer des applications Web.

to www.makeuseof.com


Abonnez-vous à notre page Facebook: https://www.facebook.com/mycamer.net
Pour recevoir l’actualité sur vos téléphones à partir de l’application Telegram cliquez ici: https://t.me/+KMdLTc0qS6ZkMGI0
Nous ecrire par Whatsapp : Whatsapp +44 7476844931