Scraper une page web avec Scrapy

Scrapy est un framework Python puissant pour le web scraping, conçu pour extraire des données à grande échelle à partir de pages web. Contrairement à BeautifulSoup, Scrapy permet d’effectuer des tâches de scraping de manière plus structurée et optimisée, en offrant des fonctionnalités avancées comme la gestion automatique des requêtes, la gestion des sessions et des cookies, ainsi que le suivi des liens entre pages. Pour scraper une page avec Scrapy, vous devez créer un « Spider » qui définit comment naviguer sur un site et quels éléments extraire. Scrapy est particulièrement adapté pour des projets de scraping à grande échelle, où la performance et l’efficacité sont cruciales.

Fonctions :

  • scrapy.Spider

    Scrapy est un framework d'extraction de données (scraping) qui permet de récupérer des informations depuis des pages web de manière plus structurée et performante. L'un des composants principaux est le Spider, qui définit les règles pour explorer les pages et extraire les données.

    Importation :

    import scrapy

    Attributs :

    Paramètre Description
    name Nom du Spider. Il sert à identifier le Spider dans le projet.
    start_urls Liste des URL de départ pour commencer l'extraction.
    allowed_domains Liste des domaines autorisés pour éviter de scraper d'autres sites.
    parse Méthode appelée pour traiter la réponse d'une requête HTTP. C'est ici que l'extraction des données est définie.

    Exemple de code :

    import scrapy
    
    class MySpider(scrapy.Spider):
        name = 'my_spider'
        start_urls = ['https://www.example.com']
    
        def parse(self, response):
            # Extraire tous les liens de la page
            links = response.css('a::attr(href)').getall()
            
            # Affichage des liens
            for link in links:
                yield {'link': link}
            
            # Suivi des liens internes pour un scraping plus profond
            for link in links:
                if link.startswith('http'):
                    yield response.follow(link, self.parse)

    Explication du code :

    1. Importation : Le module scrapy est importé.
    2. Création du Spider : Un Spider est défini comme une sous-classe de scrapy.Spider. Le nom du Spider est défini par name, qui est une chaîne d'identification.
    3. Définition des URL de départ : start_urls est une liste contenant les URL à partir desquelles le Spider commencera son exploration.
    4. Méthode parse : La méthode parse est responsable de l'extraction des données. Dans cet exemple, on utilise le sélecteur CSS (response.css) pour extraire tous les liens (<a href>). Ces liens sont ensuite renvoyés avec yield.
    5. Suivi des liens : Pour un scraping plus profond, les liens trouvés sont suivis avec response.follow, qui enverra une nouvelle requête HTTP pour scraper les pages liées.

    Utilisation de Scrapy :

    • Ce code doit être exécuté dans un projet Scrapy créé avec scrapy startproject project_name.
    • Une fois le projet configuré, tu peux exécuter ton Spider avec la commande suivante dans le terminal:
      scrapy crawl my_spider

    Ce bloc de code permet de scraper une page avec Scrapy, en extrayant les liens présents et en suivant ceux-ci pour un scraping supplémentaire.