Scrapy vs Puppeteer pour le Scraping web

Découvrez deux outils populaires pour le Scraping web : Puppeteer et Scrapy.
11 min de lecture
Scrapy vs Puppeteer

TL;DR

  • Scrapy est un framework Python qui nécessite des connaissances en matière de classes et de structure de pipeline pour le Scraping web.
  • Puppeteer est un outil de navigation sans interface utilisateur Node.js doté de fonctions de navigation et d’interaction avec les éléments.
  • Scrapy traite des dizaines de pages de manière asynchrone avec une latence inférieure à la seconde via des requêtes HTTP.
  • Puppeteer télécharge toutes les ressources et affiche les pages dans leur intégralité, ce qui le rend plus lent et gourmand en ressources.
  • Scrapy excelle dans le scraping de pages statiques à haut volume, mais nécessite un middleware pour le contenu dynamique.
  • Puppeteer gère nativement les sites dynamiques, les interactions des utilisateurs, le rendu JavaScript et la génération de captures d’écran.

Les assistants IA, tels que ChatGPT et Gemini, n’auraient jamais vu le jour sans l’énorme quantité de contenu sur lequel ces grands modèles linguistiques (LLM) ont été entraînés. Une partie importante de ce contenu a été acquise grâce à la pratique du Scraping web.

Le Scraping web est non seulement utile pour former les LLM, mais il peut également être utilisé pour l’analyse de marché, la Surveillance des prix et la génération de prospects.

Dans cet article, vous comparerez deux outils populaires utilisés pour le Scraping web : Scrapy et Puppeteer. Scrapy a été conçu spécialement pour le Scraping web, tandis que Puppeteer est un framework d’émulation de navigateur headless. Il convient de noter que Scrapy a été développé pour Python, tandis que Puppeteer a été développé pour Node.js. Cependant, il existe un port Python disponible pour Puppeteer appelé pyppeteer.

Tout au long de cet article, vous découvrirez la facilité d’utilisation, la vitesse de scraping, les fonctionnalités, le soutien de la communauté et les cas d’utilisation de chaque outil. À la fin de l’article, vous aurez une meilleure idée de l’outil qui vous convient le mieux.

Scrapy vs Puppeteer : facilité d’utilisation

Scrapy est un framework complet qui nécessite une connaissance des classes avant de pouvoir commencer à l’utiliser. Par exemple, la classe principale de Scrapy est un spider, qui définit les pages à explorer et les éléments à analyser. Il existe une multitude d’autres classes, notamment item, selector et ItemLoader. Toutes ces classes sont utilisées de manière optimale dans le cadre d’un pipeline.

Bien que la documentation soit très complète, l’utilisation de Scrapy nécessite certaines connaissances préalables sur la manière dont votre code doit être structuré.

Pour installer Scrapy et créer une structure de projet, vous pouvez exécuter les commandes suivantes dans votre terminal :

pip install scrapy
scrapy startproject <nom_du_projet>

En comparaison, Puppeteer offre simplement diverses fonctions qui peuvent être utilisées pour manipuler un navigateur sans interface graphique : naviguer vers un site web et sélectionner ou cliquer sur des éléments. C’est au développeur de structurer correctement son code.

Pour commencer à utiliser Puppeteer, une seule commande suffit. Il n’est pas nécessaire de créer une structure de projet spécifique :

npm install puppeteer

En comparaison, Puppeteer offre simplement diverses fonctions qui peuvent être utilisées pour manipuler un navigateur sans interface graphique : naviguer vers un site web et sélectionner ou cliquer sur des éléments. C’est au développeur de structurer correctement son code.

Pour commencer à utiliser Puppeteer, une seule commande suffit. Il n’est pas nécessaire de créer une structure de projet spécifique :

npm install puppeteer

Scrapy vs Puppeteer : performances

En raison de leurs approches différentes, Scrapy et Puppeteer diffèrent considérablement en termes de vitesse de scraping.

Scrapy envoie une requête HTTP à un serveur et traite la réponse pour cette seule ressource (principalement HTML). Cette approche permet à Scrapy de traiter des dizaines de pages de manière asynchrone, de parcourir le DOM et de sélectionner les éléments requis, le tout avec une latence inférieure à la seconde.

Puppeteer adopte une approche complètement différente. En tant que logiciel d’émulation de navigateur, il navigue sur un site web, télécharge toutes les ressources (telles que les images ou les scripts externes) et les charge dans la mémoire du navigateur. Il n’est pas recommandé d’exécuter de manière asynchrone plusieurs navigateurs sans interface graphique, car cela pourrait peser lourdement sur les performances d’un appareil, ce qui entraverait davantage la procédure de scraping. Il est clair que Puppeteer n’excelle pas en matière de vitesse.

Scrapy vs Puppeteer : fonctionnalités

Scrapy possède trois fonctionnalités notables : Scrapy shell, middleware et contrats :

  • Shell Scrapy
  • Scrapy prend en charge l’intégration avec diverses autres bibliothèques grâce à sa classe middleware afin de répondre à des cas d’utilisation spécifiques. Par exemple, Chompjs peut être utilisé pour l’analyse d’objets JavaScript, et Playwright for Python peut être utilisé dans un spider pour naviguer sur des sites web avec un contenu chargé dynamiquement. Ces fonctionnalités peuvent être facilement intégrées dans Scrapy grâce à l’utilisation de la classe middleware Scrapy.
  • Un spider Scrapy peut être contraint par un contrat, qui est une sorte de test visant à déterminer si la page chargée par le spider est conforme aux attentes. Par exemple, un individu peut ajouter un contrat pour tester si une page se charge suffisamment rapidement ou contient le nombre d’éléments requis. Il est également possible de développer des contrats personnalisés.

Scrapy dispose également d’un ensemble complet de fonctionnalités permettant d’éviter d’être bloqué par des mesures anti-bot. Cela inclut l’intégration avec des Proxy et la rotation des empreintes digitales du navigateur (telles que User-Agent).

Puppeteer dispose également de fonctionnalités uniques, notamment la génération de captures d’écran, l’interactivité et le traçage de chronologie. Comme Puppeteer émule un navigateur complet, il rend une page web dans son intégralité. Puppeteer peut ainsi traduire la page rendue en une capture d’écran ou même en un PDF.

Puppeteer n’a aucun problème pour afficher des sites web dynamiques et offre les outils nécessaires pour interagir avec eux. En sélectionnant des éléments, en insérant du texte et en cliquant sur des boutons, Puppeteer peut même être utilisé pour soumettre des formulaires. C’est l’une des principales raisons pour lesquelles nous avons choisi Puppeteer (nous y reviendrons plus tard).

Puppeteer prend également en charge les Proxys rotatifs, et son empreinte digitale de navigateur peut être manipulée en modifiant individuellement les paramètres du navigateur. Si la modification manuelle de ces paramètres est trop difficile, Puppeteer dispose également d’un plugin appelé «stealth », qui facilite les choses.

Une autre fonctionnalité intéressante de Puppeteer est sa capacité à générer des audits de performances web. Non seulement cela est utile pour tester des sites web, mais cela peut également être utilisé pour identifier si le serveur du site web limite votre spider :

Scrapy vs Puppeteer : soutien de la communauté

Au 28 février 2024, Scrapy comptait 1 800 abonnés et 52 000 étoiles sur GitHub, avec des commits de divers utilisateurs presque quotidiennement. Scrapy dispose également d’une communauté Reddit qui reçoit plusieurs questions par semaine, dont la plupart obtiennent une demi-douzaine de réponses. Si vous souhaitez bénéficier d’une assistance encore plus poussée, Scrapy dispose d’une communauté Discord et est présent sur Stack Overflow, où plus de 17 000 questions liées à Scrapy ont été posées.

En revanche, sur GitHub, Puppeteer compte moins de followers (1 200) que Scrapy, mais plus de stars (86 000) et des commits quotidiens de divers contributeurs. Puppeteer ne dispose pas de communautés officiellement soutenues sur Reddit ou Discord, mais plus de 8 000 questions liées à Puppeteer ont été posées sur Stack Overflow.

Enfin, Puppeteer et Scrapy disposent tous deux d’un ensemble complet de plugins ou d’extensions pris en charge par la communauté et adaptés à des cas d’utilisation spécifiques, par exemple pour intégrer Scrapy à des navigateurs headless et pour réaliser l’analyse de sites web dynamiques.

Cas d’utilisation de Scrapy et Puppeteer

Jusqu’à présent, dans cet article, vous avez brièvement découvert deux cas d’utilisation et la manière dont les deux outils excellent dans l’un ou l’autre : le scraping de grands volumes de données statiques ou l’accès à des données chargées dynamiquement.

Récupération de grands volumes de pages web statiques

Comme Scrapy se contente de charger le DOM d’une page cible, c’est le meilleur choix pour les projets de scraping à grande échelle avec des données réparties sur des milliers de pages. Comme il peut fonctionner de manière asynchrone et ne télécharge pas de ressources supplémentaires, Scrapy peut visiter plusieurs sites web en même temps, scrapant facilement des dizaines de sites web avec une latence inférieure à la seconde. Par exemple, si vous souhaitez télécharger tous les commentaires de la section commentaires de tous les articles de votre site d’actualités préféré, Scrapy est la solution idéale.

En revanche, si vous vouliez que Puppeteer fasse la même chose, il ne pourrait pas charger uniquement la page individuelle dans son intégralité dans le navigateur. Il téléchargerait également des images, des scripts et d’autres objets intégrés supplémentaires pour afficher le site web dans son intégralité, comme on peut s’y attendre d’un outil conçu pour tester des applications web. Cela crée une charge importante qui n’est souvent pas nécessaire lorsque la liste des pages contient uniquement du contenu statique et serait beaucoup plus lente que l’utilisation de Scrapy.

Récupération de contenu à partir de pages web dynamiques

Aujourd’hui, le web ne se concentre plus uniquement sur l’affichage d’informations sur des pages web, mais aussi sur l’interactivité. De nombreux sites web sont devenus des interfaces graphiques (GUI), ce qui signifie que les scénarios suivants peuvent se produire :

  • Les commentaires sont masqués derrière un bouton « Lire les commentaires » qui les ajoute à la page.
  • Le contenu est regroupé dans et derrière des onglets.
  • Les articles sont masqués derrière des paywalls et nécessitent une connexion et la soumission de CAPTCHAs.
  • Certains sites web existent sur une seule page et affichent un contenu déterminé par le comportement de navigation de l’utilisateur.

Scrapy ne peut pas gérer ce type de contenu tel quel. Le scraping de sites web dynamiques nécessiterait l’intégration d’un middleware, tel que Splash, ou l’utilisation d’un outil d’émulation de navigateur, tel que Playwright ou Selenium.

C’est dans ce cas d’utilisation que Puppeteer surpasse véritablement Scrapy. Son paradigme de navigateur sans interface graphique lui permet de charger entièrement les pages web, et son code JavaScript offre l’interactivité d’un site web. Au lieu d’essayer d’accéder à certains éléments HTML qui n’ont pas encore été chargés, Puppeteer peut interagir avec l’application web, attendre que les éléments HTML se chargent (et vérifier leur existence), les sélectionner et télécharger leur contenu lorsqu’ils sont disponibles.

Il est important de noter que Scrapy et Puppeteer peuvent s’intégrer à l’aide du modulescrapy-pyppeteer. Ce module peut être utile si vous êtes convaincu par le framework Scrapy, mais que vous avez besoin d’un navigateur sans interface graphique pour accéder à du contenu chargé dynamiquement.

Conclusion

Scrapy et Puppeteer sont des outils qui suivent des paradigmes complètement différents et ont même été conçus avec des objectifs différents. Cependant, ils peuvent tous deux être utilisés pour extraire du contenu web. En raison de ces différences d’approche, Scrapy est la solution idéale pour extraire d’énormes volumes de données, tandis que Puppeteer est le meilleur choix pour naviguer sur des sites web qui affichent certains contenus après une interaction spécifique de l’utilisateur.

Cependant, ces outils ont également des points communs. Leurs communautés sont assez comparables et ils sont plus ou moins équivalents en termes de facilité d’utilisation. Ils ont également des fonctionnalités communes, telles que l’empreinte digitale du navigateur et la rotation des Proxy.

Si vous recherchez une suite d’outils pour industrialiser vos efforts de scraping, pensez àBright Data, qui propose des millions de Proxy, des API de scraping, un navigateur spécialement conçu pour le scraping et des ensembles de données facilement accessibles. Bright Data dispose également d’une documentation très complète sur le Scraping web. Vous pouvez par exemple en apprendre davantage surle Scraping web avec Puppeteeret explorer les intégrations avecPuppeteeretScrapy.

Ensuite, comparez Puppeteer et Selenium.