Scrapy est un framework Python puissant spécialement conçu pour le web scraping. Il vous permet de créer des spiders (scrapers) capables d’explorer automatiquement des sites web et d’en extraire des données de manière structurée. Dans cet article, nous allons voir comment utiliser Scrapy pour créer un scraper basique extrayant du contenu depuis une page Wikipédia.
Installer Scrapy
Commencez par installer Scrapy si ce n’est pas déjà fait avec pip :
pip install scrapy
Créer un nouveau projet Scrapy
Lancez l’outil Ligne de Commande (CMD/Terminal) et créez un nouveau projet nommé “wikipedia_scraper” :
scrapy startproject wikipedia_scraper
import scrapy
class WikipediaSpider(scrapy.Spider):
name = "wikipedia"
start_urls = ["https://fr.wikipedia.org/wiki/Web_scraping"]
def parse(self, response):
content = response.css("div.mw-parser-output > *::text").getall()
yield {
"content": content
}
Ce spider scrapy se lance sur la page https://fr.wikipedia.org/wiki/Web_scraping, et extrait le texte brut de tout le contenu principal dans un dictionnaire.
Lancer le spider
Enfin, revenez dans le répertoire principal du projet et lancez le spider (dans le CMD/terminal) en exécutant :
scrapy crawl wikipedia -o data.json
Scrapy va récupérer le contenu de la page Wikipédia spécifiée. Les données extraites seront enregistrées dans un fichier data.json.
Scrapy: fonctionnalités avancées pour un web scraping robuste en Python
Nous avons vu précédemment comment Scrapy permet de créer facilement des spiders pour extraire des données web. Mais ce framework open source offre bien d’autres fonctionnalités avancées qui en font un outil complet pour un web scraping efficace et respectueux des bonnes pratiques.
Suivi intelligent des liens
Une des forces de Scrapy est sa capacité à automatiser le suivi des liens entre les pages d’un site. Le suivi de liens permet d’explorer un site web dans son ensemble et d’appliquer vos extracteurs de données à toutes les pages pertinentes.
Dans Scrapy, le suivi de liens est configuré par des règles définies dans votre spider. Voici un exemple ajoutant une règle pour suivre tous les liens vers des pages de catégories produits :
rules = (
Rule(LinkExtractor(allow='/category/'), callback='parse_category'),
)
Vous spécifiez ici un motif d’URL à suivre et la méthode parse_category sera appelée pour chaque lien correspondant.
Expressions régulières avancées
Scrapy intègre le moteur d’expressions régulières puissant de Python. Les regex permettent d’effectuer des correspondances complexes sur le HTML ou le texte extrait.
Par exemple, pour récupérer des codes produits correspondant à un certain motif :
product_codes = response.css('div.product::text').re(r'Code\s?:\s?(\w+)')
La méthode re() applique l’expression régulière spécifiée pour capturer les codes produits désirés.
Respect des règles robots.txt
Un autre aspect important du web scraping éthique est le respect des règles robots.txt des sites visités. Par défaut, Scrapy applique ces règles automatiquement mais vous pouvez aussi définir des exceptions si nécessaire.
Dans vos paramètres spider :
ROBOTSTXT_OBEY = True
ROBOTSTXT_PARSERS = {
'mysite.com': 'MySiteRobotParser'
}
Ici MySiteRobotParser permettra d’appliquer une logique particulière de parsing du fichier robots.txt pour mysite.com.
Lire aussi :
- Python : Extraire le contenu HTML d’une Page Web avec Requests
- Trois techniques efficaces pour le web scraping avec Python
- Python : Calculer la Probabilité de Gagner au Loto
- Python : Créer un scraper pour extraire des données d’une page web avec Scrapy