Le scraping web est une technique qui consiste à extraire et collecter automatiquement des données de sites web à l’aide d’outils ou de programmes spécialisés. Elle est particulièrement utile pour les entreprises cherchant à améliorer leurs processus de prise de décision basés sur les données.
Cependant, en raison des structures HTML complexes, du contenu dynamique et des divers formats de données présents sur la plupart des sites web, l’efficacité du scraping web dépend des outils que vous utilisez.
Scrapy et Selenium sont des outils puissants conçus pour faciliter le scraping web. Scrapy extrait des données de sites web statiques, tandis que Selenium peut automatiser les navigateurs web et extraire des données de sites web dynamiques.
Dans cet article, vous comparerez les deux outils en fonction de leur facilité d’utilisation, de leurs performances et de leur évolutivité, de leur adéquation à différents types de contenus web et de leurs capacités d’intégration.
Facilité d’utilisation
Scrapy est un outil de scraping web basé sur Python qui peut fonctionner sous Linux, Windows, macOS et Berkeley Software Distribution (BSD). Non seulement Scrapy est facile à utiliser, mais il fournit également une API de haut niveau pour les tâches de scraping web, ce qui peut contribuer à simplifier davantage le processus de scraping web.
Pour configurer Scrapy, il vous suffit de l’installer et de configurer des spiders à l’aide de code Python (ce qui nécessite une certaine compréhension des concepts de scraping web). Lorsque vous exécutez une commande Scrapy pour lancer un projet, il génère un dossier dédié à votre projet. Dans ce dossier, vous trouverez des fichiers Python par défaut, tels que items.py, pipelines.py et settings.py. Ces fichiers sont organisés dans une structure simplifiée, facilitant la prise en main du scraping web.
Scrapy fournit une documentation approfondie, comprenant des articles et des vidéos sélectionnés pour répondre à toutes vos questions. Scrapy possède également un subreddit actif et une communauté Discord où vous pouvez participer à différentes discussions.
En comparaison, Selenium prend en charge plusieurs langages de programmation, notamment Java, JavaScript, Python et C#, et est compatible avec de nombreux systèmes d’exploitation identiques à Scrapy, dont Windows, macOS et Linux. Comparé à Scrapy, Selenium est moins facile à apprendre et nécessite plus de temps, d’efforts et parfois de ressources avant de le maîtriser.
Pour configurer Selenium, vous devez installer la bibliothèque Selenium puis configurer les WebDrivers qui gèrent l’automatisation du navigateur. Si vous scrapez des données d’un site web dynamique nécessitant une connexion, vous devez configurer l’automatisation web pour gérer le processus de connexion avant de pouvoir commencer à scraper des données.
Selenium offre un riche ensemble de méthodes de navigation personnalisables pour localiser facilement des éléments sur une page web. De plus, il propose des chaînes d’actions interactives, notamment des clics, doubles clics, glisser-déposer et défilements, permettant une interaction aisée avec les pages web.
La documentation officielle de Selenium comprend des directives détaillées, des instructions pas à pas et des tutoriels relatifs à l’automatisation web et au scraping web.
Selenium étant un outil plus polyvalent pour l’automatisation web, il dispose d’une communauté plus large et plus diverse. Si vous avez des questions en travaillant avec Selenium, son groupe d’utilisateurs officiel et sa communauté subreddit peuvent vous aider. Ou si vous avez un problème nécessitant une réponse immédiate, vous pouvez utiliser leur salon IRC.
Performances et évolutivité
L’efficacité des performances de tout outil de scraping web repose fortement sur sa vitesse, l’objectif étant de collecter rapidement une quantité significative de données.
Scrapy excelle dans le scraping de contenu de pages web statiques, ce qui entraîne une extraction de données plus rapide que Selenium. En effet, Selenium s’appuie sur des instances de navigateur pour exécuter différentes interactions, comme cliquer sur des boutons ou remplir des formulaires.
Dans un test de vitesse collectant les titres et prix de 1 000 livres depuis https://books.toscrape.com/, Scrapy a pu accomplir la tâche en 31,57 secondes. En revanche, Selenium a mis en moyenne 156,01 secondes pour scraper le même contenu :

L’architecture de Scrapy gère efficacement la mémoire en traitant les réponses et les éléments dans un processus continu, évitant de charger des pages web entières en mémoire à la fois. Scrapy dispose également d’une prise en charge intégrée du cache et du scraping incrémental, ce qui améliore l’évolutivité en minimisant les requêtes redondantes et en ne traitant que le contenu nouveau ou mis à jour.
De plus, Scrapy propose des options pour affiner l’utilisation de la mémoire via des paramètres tels que les requêtes simultanées, les limites de profondeur et les pipelines d’éléments. Ces fonctionnalités vous permettent d’optimiser la consommation de mémoire selon les besoins spécifiques de votre projet de scraping web.
Selenium consomme généralement une quantité importante de mémoire lors de l’interaction avec des sites web à forte utilisation de JavaScript, entraînant une consommation de mémoire plus élevée. Cela peut nuire à son évolutivité et à ses performances, en particulier dans les projets de scraping à grande échelle.
Le middleware intégré de Scrapy appelé HTTPCacheMiddleware met en cache les requêtes effectuées par les spiders et leurs réponses associées. Vous pouvez activer la mise en cache en ajoutant le code suivant au fichier settings.py de votre projet :
# Enable and configure HTTP caching (disabled by default)
HTTPCACHE_ENABLED = True
La mise à l’échelle de Selenium pour gérer le scraping de données à grande échelle nécessite le déploiement de plusieurs instances sur des systèmes distribués, entraînant une augmentation des besoins en ressources, telles que la RAM et le CPU.
Adéquation aux différents types de contenu web
La majorité des sites web sur internet proposent des pages web dynamiques ou statiques. Voyons comment Scrapy et Selenium gèrent ces deux types de pages web.
Pages web dynamiques
La majorité des pages web dynamiques sont alimentées par des frameworks JavaScript, tels qu’Angular et React, pour mettre à jour le contenu sans recharger la page entière.
Selenium peut scraper du contenu dynamique de divers sites web, mais Scrapy ne prend pas en charge nativement le scraping de contenu dynamique généré par JavaScript. Vous pouvez intégrer Scrapy avec des outils comme Selenium et Splash pour obtenir cette fonctionnalité.
Pages web statiques
Les pages web statiques offrent généralement une interaction limitée par rapport aux pages dynamiques, permettant habituellement aux utilisateurs uniquement de consulter du contenu ou de cliquer sur des liens.
Comme mentionné précédemment, Selenium peut scraper des pages statiques, mais ce n’est pas l’outil le plus efficace pour cette tâche. En revanche, Scrapy excelle dans le scraping de données statiques, offrant une expérience fluide et efficace pour collecter les informations souhaitées.
Capacités d’intégration
Scrapy peut facilement s’intégrer avec la plupart des outils Python, notamment des bases de données comme MySQL, PostgreSQL et MongoDB, pour stocker les données scrapées. Vous pouvez même utiliser des mappeurs objet-relationnel (ORM), tels que SQLAlchemy, pour simplifier le processus de stockage des données dans des bases de données relationnelles. Si vous souhaitez traiter et analyser davantage vos données, vous pouvez utiliser pandas, une bibliothèque populaire de manipulation et d’analyse de données pour Python.
Scrapy peut également être intégré avec des frameworks web tels que Django et Flask pour créer des applications web intégrant des fonctionnalités de scraping web. De plus, l’intégration avec FastAPI vous permet de créer des API web haute performance avec support asynchrone, adaptées au traitement efficace des requêtes de scraping.
En revanche, Selenium fournit des pilotes de navigateur qui agissent comme intermédiaires entre les API Selenium WebDriver et les navigateurs. Vous pouvez télécharger et installer un WebDriver pour l’intégrer avec le navigateur web de votre choix. Selenium fournit actuellement des pilotes pour Chrome, Edge, Firefox et Safari.
Selenium peut également être utilisé pour tester automatiquement les fonctionnalités des applications web ; cependant, gardez à l’esprit qu’il ne dispose pas d’un framework de test intégré. Vous pouvez intégrer Selenium avec d’autres frameworks de test populaires, notamment CodeceptJS, Helium et Selenide.
Selenium s’intégrait auparavant avec des outils CI, tels que Jenkins et Travis CI, pour permettre l’exécution automatique de scripts d’automatisation dans le cadre du pipeline d’intégration et de livraison continues (CI/CD) ; désormais, tout s’exécute avec GitHub Actions qui prend en charge les processus de test et de déploiement continus.
Scrapy peut être intégré avec différents fournisseurs de services Proxy, tels que Bright Data, en transmettant l’IP et le port du Proxy comme paramètre de requête. Cette méthode est recommandée si vous souhaitez utiliser un Proxy spécifique pour votre projet.
Par exemple, si vous souhaitez vous intégrer à un serveur Proxy, vous pouvez utiliser la commande pip pip3 install scrapy pour installer Scrapy, comme ceci :
#import scrapy module
import scrapy
class BookSpider(scrapy.Spider):
name = "books"
def start_requests(self):
start_urls = ["https://example.com/products"]
for url in start_urls:
yield scrapy.Request(
url=url,
callback=self.parse,
# connect with proxy
meta={"proxy": "http://USERNAME:[email protected]:22225"},
)
def parse(self, response):
for book in response.css(".book-card"):
yield {
"title": book.css(".title ::text").get(),
"price": book.css(".price-wrapper ::text").get(),
}
Ici, vous importez Scrapy et définissez une classe appelée BookSpider héritée de la classe spider de Scrapy pour scraper une liste de livres du site web. La méthode start_requests() initie des requêtes avec des URL et des Proxys spécifiés, et la méthode parse() extrait les titres et prix des livres à l’aide de sélecteurs CSS.
En revanche, Selenium prend en charge l’intégration de Proxy de manière simple via divers pilotes de navigateur, tels que ChromeDriver et geckodriver. Il vous suffit de configurer Selenium WebDriver pour acheminer ses requêtes HTTP via un serveur Proxy.
Par exemple, vous pouvez intégrer Selenium avec des Proxys en spécifiant l’IP et le port du Proxy fournis par Bright Data, comme ceci :
#import selenium modules
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
# Proxy configuration
proxy_address = "http://USERNAME:[email protected]"
proxy_port = "22225"
# Selenium options : integrate with proxy credentials from Bright data
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=%s:%s' % (proxy_address, proxy_port))
# Selenium webdriver instantiation
driver = webdriver.Chrome(options=options)
# Example usage: scraping a webpage
url = "https://example.com"
driver.get(url)
print(driver.page_source)
# Close the driver
driver.quit()
Ici, vous importez les modules Selenium requis et configurez le Proxy. Ensuite, vous configurez Chrome pour utiliser des serveurs Proxy définis, instanciez un WebDriver, scrapez une page web ("https://example.com"), affichez la source de la page et fermez le WebDriver pour terminer le processus.
Conclusion
Dans cet article, vous avez comparé deux outils de scraping web populaires : Scrapy et Selenium.
Scrapy est un outil de scraping basé sur Python, facile à utiliser et idéal pour l’extraction de données sur des sites web statiques. En revanche, Selenium offre des capacités d’automatisation et de scraping dans plusieurs langages de programmation, prend en charge divers navigateurs web et constitue la meilleure option pour scraper du contenu dynamique rendu par JavaScript.
Quel que soit l’outil que vous choisissez, il est recommandé d’utiliser une infrastructure de données comme Bright Data. Elle peut vous aider à ajouter des fonctionnalités à vos scripts de scraping web pour contourner les restrictions géographiques, les blocages et résoudre les CAPTCHAs. Vous pouvez également utiliser l’API et le SDK Bright Data pour répondre à un plus large éventail d’exigences de scraping, garantissant l’efficacité, la vitesse, la précision et l’évolutivité de votre projet de scraping web. Vous souhaitez aller encore plus loin dans votre collecte de données ? Achetez un jeu de données personnalisé (échantillons gratuits disponibles).