Dans ce guide Scrapy vs Pyspider, vous apprendrez :
- Ce que sont Scrapy et Pyspider
- Une comparaison entre Scrapy et Pyspider pour le web scraping
- Comment utiliser Scrapy et Pyspider pour le web scraping ?
- Limitations communes entre Scrapy et Pyspider dans les scénarios de web scraping
Plongeons dans l’aventure !
Qu’est-ce que Scrapy ?
Scrapy est un framework de scraping web open-source écrit en Python. Son objectif principal est d’extraire des données de sites web rapidement et efficacement. En détail, il vous permet de :
- Définir comment naviguer et recueillir des informations sur une ou plusieurs pages web.
- Gérer des aspects tels que les requêtes HTTP, le suivi des liens et l’extraction de données.
- Évitez l’interdiction en ajustant la vitesse de la demande grâce à l’étranglement et aux demandes asynchrones.
- Gérer les proxies et la rotation des proxies via un logiciel intermédiaire personnalisé ou la bibliothèque
scrapy-rotating-proxies
.
Qu’est-ce que Pyspider ?
Pyspider est un framework open-source d’exploration de sites web écrit en Python. Il est conçu pour extraire des données de sites web avec facilité et flexibilité, et vous permet de :
- Définir comment naviguer et collecter des informations à partir d’une ou plusieurs pages web via l’interface CLI ou une interface web conviviale.
- Gérer des aspects tels que la planification des tâches, les tentatives et le stockage des données.
- Limiter les blocages en prenant en charge l’exploration distribuée et les tâches prioritaires.
- Gérer des flux de travail et des traitements de données complexes grâce à la prise en charge intégrée des bases de données et des files d’attente de messages.
Scrapy vs Pyspider : Comparaison des fonctionnalités pour le Web Scraping
Maintenant que vous avez appris ce que sont Scrapy et Pyspider, il est temps de les comparer pour le web scraping :
Fonctionnalité | Ferraille | Araignée de mer |
---|---|---|
Cas d’utilisation | Projets de décapage complexes et à grande échelle | Tâches de scraping planifiées |
Gestion du raclage | CLI | CLI et interface utilisateur |
Méthodes d’analyse | Sélecteurs XPath et CSS | Sélecteurs CSS |
Sauvegarde des données | Possibilité d’exporter les données vers des fichiers CSV et d’autres formats de fichiers | Sauvegarde automatique des données dans la base de données |
Réessayer | Nécessite une intervention manuelle pour réessayer | Réessaie automatiquement les tâches qui n’ont pas abouti |
Planification des tâches | Nécessite des intégrations externes | Prise en charge native |
Rotation des mandataires | Prise en charge de la rotation du proxy via des logiciels intermédiaires | Nécessite une intervention manuelle |
Communauté | La communauté Hige, qui compte actuellement plus de 54k étoiles GitHub, y contribue activement. | Vaste communauté, avec actuellement plus de 16k étoiles GitHub, mais archivée depuis le 11 juin 2024 |
Le tableau comparatif Scrapy vs Pyspider ci-dessus montre que ces deux bibliothèques sont similaires. Les principales différences à un niveau élevé sont les suivantes :
- Scrapy ne peut être utilisé que via le CLI, tandis que Pyspider fournit également une interface utilisateur.
- Scrapy peut analyser les sélecteurs XPath et CSS, tandis que Pyspider ne prend en charge que les sélecteurs CSS.
- Scrapy prend automatiquement en charge la rotation du proxy par le biais d’une logique intermédiaire personnalisée.
Cependant, ce qu’il est vraiment important de prendre en compte, c’est que Pyspider n’est plus supporté:
Scrapy vs Pyspider : Comparaison directe du scraping
Après avoir comparé Scrapy et Pyspider, vous avez appris que ces deux frameworks offrent des fonctionnalités similaires en matière de web scraping. C’est pourquoi la meilleure façon de les comparer est de le faire à l’aide d’un exemple de codage.
Les deux prochaines sections vous montreront comment utiliser Scrapy et Pyspider pour récupérer le même site. En détail, la page cible sera la page “Hokey Teams” de Scrape This Site. Elle contient des données sur le hockey sous forme de tableaux :
L’objectif de ces sections est de récupérer toutes les données du tableau et de les enregistrer localement. Voyons comment faire !
Comment utiliser Scrapy pour le Web Scraping ?
Dans ce paragraphe, vous apprendrez à utiliser Scrapy pour récupérer toutes les données du tableau fourni par le site web cible.
Exigences
Pour suivre ce tutoriel, vous devez avoir installé Python 3.7 ou une version plus récente sur votre machine.
Étape 1 : Configuration de l’environnement et installation des dépendances
Supposons que vous appeliez le dossier principal de votre projet hockey_scraper/.
À la fin de cette étape, le dossier aura la structure suivante :
hockey_scraper/
└── venv/
Vous pouvez créer le répertoire de l ‘environnement virtuel venv/ de la
manière suivante :
python -m venv venv
Pour l’activer, sous Windows, exécutez :
venv\Scripts\activate
De manière équivalente, sous macOS/Linux, exécutez :
source venv/bin/activate
Vous pouvez maintenant installer Scrapy avec :
pip install scrapy
Étape 2 : Démarrer un nouveau projet
Vous pouvez maintenant lancer un nouveau projet Scrapy. Dans le dossier principal hockey_scraper/
, tapez :
scrapy startproject hockey
Avec cette commande, Scrapy créera un dossier hockey/.
À l’intérieur, il générera automatiquement tous les fichiers dont vous avez besoin. Voici la structure du dossier qui en résulte :
hockey_scraper/
├── hockey/ # Main Scrapy project folder
│ ├── __init__.py
│ ├── items.py # Defines the data structure for scraped items
│ ├── middlewares.py # Custom middlewares
│ ├── pipelines.py # Handles post-processing of scraped data
│ ├── settings.py # Project settings
│ └── spiders/ # Folder for all spiders
├── venv/
└── scrapy.cfg # Scrapy configuration file
Étape 3 : Générer l’araignée
Pour générer un nouveau robot d’exploration du site web cible, il faut d’abord aller dans le dossier hockey/ :
cd hockey
Ensuite, générez une nouvelle araignée avec :
scrapy genspider data https://www.scrapethissite.com/pages/forms/
Dans ce script, data
représente le nom de l’araignée. Scrapy créera automatiquement un fichier data.py
dans le dossier spiders/.
Ce fichier contiendra la logique de scraping nécessaire pour récupérer les données de l’équipe Hokey.
Étape 4 : Définir la logique du scraping
Vous êtes prêt à coder la logique de scraping. Tout d’abord, inspectez le tableau contenant les données qui vous intéressent dans votre navigateur. Vous pouvez voir que les données sont contenues dans un élément .table
:
Pour obtenir toutes les données, écrivez le code suivant dans le fichier data.py :
import scrapy
class DataSpider(scrapy.Spider):
name = "data"
allowed_domains = ["www.scrapethissite.com"]
start_urls = ["https://www.scrapethissite.com/pages/forms/"]
def parse(self, response):
for row in response.css("table.table tr"):
yield {
"name": row.css("td.name::text").get(),
"year": row.css("td.year::text").get(),
"wins": row.css("td.wins::text").get(),
"losses": row.css("td.losses::text").get(),
"ot_losses": row.css("td.ot-losses::text").get(),
"pct": row.css("td.pct::text").get(),
"gf": row.css("td.gf::text").get(),
"ga": row.css("td.ga::text").get(),
"diff": row.css("td.diff::text").get(),
}
Notez que les variables name
, allowed_domains
, et start_urls
ont été automatiquement créées par Scrapy à l’étape précédente.
Même la méthode parse()
a été automatiquement créée par Scrapy. Il suffit donc d’ajouter la logique de scraping à cette étape, qui se trouve sous la boucle for.
En détail, la méthode response.css()
recherche le tableau. Ensuite, le code itère sur toutes les lignes du tableau et récupère les données.
Étape 5 : Exécuter le Crawler et enregistrer les données dans un fichier CSV
Pour lancer le crawler et enregistrer les données récupérées dans un fichier CSV, tapez ce qui suit :
scrapy crawl data -o output.csv
Avec ce code, Scrapy :
- Exécute le fichier
data.py
qui contient la logique de scraping - Enregistre les données scannées dans un fichier CSV appelé
output.csv
Le fichier output.csv
produit par le scraper est le suivant :
Notez que cette façon d’utiliser Scrapy est la plus courte, mais ce n’est pas la seule. Scrapy offre différentes personnalisations et paramètres, et vous pouvez en savoir plus à ce sujet dans notre article sur Scrapy vs Requests.
Comment utiliser Pyspider pour le Web Scraping ?
Voir comment utiliser Pyspider pour récupérer le même site web cible.
Exigences
Pyspider supporte la dernière version de Python, la 3.6. Si vous avez installé des versions ultérieures de Python, lisez l’étape suivante pour apprendre à utiliser sa version 3.6.
Étape 1 : Configuration de l’environnement et installation des dépendances
Supposons que vous appeliez le dossier principal de votre projet hockey_scraper/.
Si vous avez Python 3.7 ou plus, installez pyenv
pour obtenir Python 3.6.
Utilisez pyenv
pour installer Python 3.6 avec cette commande :
pyenv install 3.6.15
Ensuite, faites-en la version locale de Python, afin de ne pas affecter l’ensemble du système avec une version différente :
pyenv local 3.6.15
Pour vous assurer que tout s’est bien passé, vérifiez la version de Python :
python --version
Le résultat doit être :
Python 3.6.15
Créez un environnement virtuel en sélectionnant la bonne version de Python :
python3.6 -m venv venv
Activez l’environnement virtuel comme indiqué dans le chapitre précédent de ce guide. Maintenant, vous pouvez installer Pyspider avec :
pip install pyspider
Pour lancer l’exécution de l’interface utilisateur :
pyspider
Notez que, puisque ce dépôt est archivé et que vous utilisez Python 3.6, vous recevrez quelques erreurs. Pour les corriger, vous devrez peut-être installer les bibliothèques suivantes :
pip install tornado==4.5.3 requests==2.25.1
Vous pouvez également recevoir d’autres erreurs concernant le fichier webdav.py.
Recherchez ce fichier et corrigez les erreurs suivantes :
- Dans la classe
ScriptProvider()
, renommez la méthodegetResourceInst()
enget_resource_inst()
. - Au bas du fichier, recherchez la variable
config = DEFAULT_CONFIG.copy()
et remplacez tout le code suivant par :
config = DEFAULT_CONFIG.copy()
config.update({
"mount_path": "/dav",
"provider_mapping": {
"/": ScriptProvider(app)
},
"domaincontroller": NeedAuthController(app),
"verbose": 1 if app.debug else 0,
"dir_browser": {"davmount": False,
"enable": True,
"msmount": False,
"response_trailer": ""},
})
dav_app = WsgiDAVApp(config)
L’interface web de pyspider devrait maintenant pouvoir démarrer. Visitez http://localhost:5000/
dans votre navigateur, et voici ce que vous devriez voir :
Étape 2 : Créer un nouveau projet
Cliquez sur “Créer” pour créer un nouveau projet et remplissez les champs :
- Choisissez un nom de projet de votre choix, par exemple
Hockey_scraper
. Définissez https://www.scrapethissite.com/pages/forms/
dans le champ URL(s) de départ.
Le résultat devrait être le suivant :
Étape 3 : Définir la logique du scraping
Mettre en œuvre la logique de scraping en écrivant le code Python directement dans l’éditeur dans la partie droite de l’interface utilisateur :
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {}
@every(minutes=24 * 60)
def on_start(self):
self.crawl("https://www.scrapethissite.com/pages/forms/", callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc("table.table tr").items():
self.crawl(each.attr.href, callback=self.detail_page)
@config(priority=2)
def detail_page(self, response):
return {
"name": row.css("td.name::text").get(),
"year": row.css("td.year::text").get(),
"wins": row.css("td.wins::text").get(),
"losses": row.css("td.losses::text").get(),
"ot_losses": row.css("td.ot-losses::text").get(),
"pct": row.css("td.pct::text").get(),
"gf": row.css("td.gf::text").get(),
"ga": row.css("td.ga::text").get(),
"diff": row.css("td.diff::text").get(),
}
Voici ce qui a changé par rapport au code par défaut :
- La méthode
response.doc()
recherche le tableau cible. detail_page()
renvoie les lignes qui sont interceptées via la méthoderow.css().
Cliquez sur “Enregistrer” et “Exécuter” pour lancer le processus de scraping. Les données obtenues seront similaires à celles que vous avez obtenues avec Scrapy.
C’est génial ! Vous savez maintenant comment utiliser Scrapy et Pyspider pour le web scraping.
Scrapy vs Pyspider : Lequel utiliser ?
La comparaison entre Scrapy et Pyspider a montré comment les utiliser, mais lequel est le meilleur ? Il est temps de le découvrir !
Choisissez Scrapy :
- Pour les projets à haute performance qui nécessitent une exploration parallèle et des fonctionnalités avancées, telles que l’étranglement.
- Si vous avez besoin d’intégrer votre scraping avec des pipelines externes ou d’autres outils.
- Si vous êtes confiant dans l’utilisation de CLI et dans les scénarios de web scraping et que vous préférez un cadre de travail actualisé.
Choisissez Pyspider si :
- Vous préférez utiliser une interface utilisateur plutôt que la CLI.
- Vous souhaitez travailler sur un système distribué et préférez les configurations simples.
- Vous souhaitez planifier des tâches de scraping.
Comme toujours, il n’y a pas de vainqueur définitif – le meilleur outil de scraping dépend entièrement de vos besoins spécifiques et de votre cas d’utilisation.
Limites de Scrapy et Pyspider
Scrapy et Pyspider sont des frameworks puissants pour le web scraping, mais ils ont leurs limites.
Tout d’abord, ils ont du mal à gratter les sites à contenu dynamique qui utilisent JavaScript pour le rendu ou la récupération des données. Bien qu’ils puissent tous deux être étendus pour récupérer les sites utilisant JavaScript, ils sont intrinsèquement limités à cet égard. Cela les rend également plus sensibles aux mesures anti-scraping courantes.
De plus, ces deux frameworks sont sujets à des interdictions d’IP, car ils font beaucoup de requêtes automatisées. Celles-ci peuvent déclencher des limiteurs de taux, ce qui conduit à l’inscription de votre IP sur la liste noire. Une solution pour éviter que votre IP soit bannie est d’intégrer des proxys dans votre code.
Pour la rotation de proxy, voir notre guide sur l ‘utilisation de proxies pour la rotation d’adresses IP en Python.
Enfin, si vous êtes à la recherche de serveurs proxy fiables, n’oubliez pas que le réseau proxy de Bright Data bénéficie de la confiance des entreprises Fortune 500 et de plus de 20 000 clients dans le monde entier. Ce vaste réseau comprend :
- Proxies de centres de données: Plus de 770 000 adresses IP de centres de données.
- Proxies résidentiels: Plus de 72 millions d’adresses IP résidentielles dans plus de 195 pays.
- Proxies ISP: Plus de 700 000 IP de FAI.
- Proxies mobiles: Plus de 7 millions d’adresses IP mobiles.
Conclusion
Dans cet article de blog Scrapy vs Pyspider, vous avez appris le rôle de ces deux bibliothèques dans le web scraping. Vous avez exploré leurs fonctionnalités d’extraction de données et comparé leurs performances dans un scénario réel de pagination.
Pyspider offre une interface utilisateur conviviale, mais est malheureusement obsolète. Scrapy, en revanche, est utile pour les grands projets car il fournit la plupart des outils nécessaires au scraping structuré et sa technologie sous-jacente est à jour avec les dernières versions de Python.
Vous avez également découvert leurs limites, telles que les interdictions potentielles d’IP. Heureusement, ces difficultés peuvent être surmontées à l’aide de proxys ou de solutions dédiées au web scraping, comme l’API Web Scraper de Bright Data. Cette API axée sur le scraping s’intègre de manière transparente à Scrapy, Pyspider et à tout autre client HTTP ou outil de scraping Web, ce qui permet une extraction de données sans restriction.
Créez un compte Bright Data gratuit dès aujourd’hui pour découvrir nos API proxy et scraper !
Aucune carte de crédit requise