Scrapy vs Pyspider : Lequel est le meilleur pour le Web Scraping ?

Comparez Scrapy vs Pyspider pour le web scraping et choisissez le meilleur outil pour vos besoins en web scraping.
13 min de lecture
Scrapy vs Pyspider blog image

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

Dépôt GitHub archivé de Pyspider

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 :

Les données tabulaires à extraire

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:

La classe de tableau dans le code HTML n le code HTML de la page web cible

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 :

Le fichier CSV attendu

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éthode getResourceInst() en get_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 :

L'interface utilisateur de Pyspider

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

Le résultat de la création du projet dans Pyspider

É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éthode row.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 :

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