FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Tutoriel : Créez un robot d'exploration Web simple avec Scrapy en Python

Les robots d'exploration Web, ou web crawlers, sont des outils puissants pour extraire des données de sites internet. Ils servent à collecter des cours boursiers, des résultats sportifs, des tweets ou des prix de produits en ligne. Écriture d'un tel programme est plus simple que vous ne le pensez grâce à Python et sa bibliothèque Scrapy.

Dans ce tutoriel détaillé, découvrez comment créer votre premier robot d'exploration Web avec Scrapy, une solution rapide et efficace pour naviguer sur plusieurs pages.

Installer Scrapy

Scrapy est une bibliothèque Python spécialisée dans le web scraping et la création de crawlers. Elle est performante, intuitive et gère facilement la navigation multi-pages.

Installez-la via pip après avoir créé un environnement virtuel Python, recommandé pour isoler les dépendances.

Créez un dossier et activez l'environnement virtuel :

mkdir mon_robot
cd mon_robot
python -m venv venv
# Linux/Mac :
source venv/bin/activate
# Windows :
venv\Scripts\activate

Installez Scrapy :

pip install scrapy

Vérifiez l'installation :

scrapy version
# Affiche : Scrapy 2.x.x

Comment créer un robot d'exploration Web

Préparons l'environnement pour extraire des données de la page Wikipédia sur les batteries : https://fr.wikipedia.org/wiki/Batterie_électrique.

Créez un fichier spider1.py avec une classe héritant de scrapy.Spider :

import scrapy

class Spider1(scrapy.Spider):
    name = 'wikipedia'
    start_urls = ['https://fr.wikipedia.org/wiki/Batterie_%C3%A9lectrique']

    def parse(self, response):
        pass

Testez :

scrapy runspider spider1.py

Désactiver la journalisation

Ajoutez au début du fichier pour réduire les logs :

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Utiliser l'inspecteur Chrome

Les pages Web sont structurées en HTML via le DOM. Utilisez les outils DevTools de Chrome pour inspecter :

  • Allez sur la page.
  • Cliquez droit sur un élément > Inspecter.

Cela révèle les sélecteurs CSS pour extraire les données.

Extraire le titre

Modifiez parse() :

def parse(self, response):
    print(response.css('h1#firstHeading::text').get())

Exécutez : affiche 'Batterie électrique'. La méthode css() sélectionne via sélecteurs CSS, ::text extrait le texte, get() retourne la valeur.

Trouver la description

Extrayez le premier paragraphe :

def parse(self, response):
    desc = response.css('div#mw-content-text > div > p')[0].css('::text').get()
    print(''.join(desc).strip() if desc else '')

Résultat : le texte du premier paragraphe.

Collecter des données JSON

Utilisez yield pour exporter en JSON. Extrayez tous les paragraphes :

def parse(self, response):
    for p in response.css('div#mw-content-text > div > p'):
        yield {'para': ''.join(p.css('::text').getall()).strip()}

Exécutez avec sortie JSON :

scrapy runspider spider1.py -o output.json

Scraper plusieurs éléments

Exemple : top box-office IMDb (https://www.imdb.com/chart/boxoffice/). Adaptez les sélecteurs si nécessaire.

def parse(self, response):
    for row in response.css('div#boxoffice table tbody tr'):
        yield {
            'title': ''.join(row.css('td.titleColumn a::text').getall()).strip(),
            'weekend': ''.join(row.css('td.ratingColumn')[0].css('::text').getall()).strip(),
            'gross': ''.join(row.css('td.ratingColumn')[1].css('span.secondaryInfo::text').getall()).strip(),
            'weeks': ''.join(row.css('td.weeksColumn::text').getall()).strip(),
            'image': row.css('td.posterColumn img::attr(src)').get(),
        }

Plus de scrapers et bots

Scrapy excelle dans tout type de scraping. Explorez bots Twitter/Instagram avec Python pour aller plus loin. Respectez les robots.txt et CGU des sites pour une pratique éthique.

[]