Bibliothèques pour le web scraping

Catalogue des bibliothèques de web scraping pour Python, JavaScript, PHP, Java, C# et Go : que choisir pour les pages statiques, le contenu dynamique et les API.

ÉW
Équipe Web-Scraping.fr
Collecte de données pour votre activité
Publié le: 31 janvier 2025

Dans un article dédié, nous avons vu dans quel langage écrire un scraper et comparé les langages entre eux. Ici, nous passons au niveau de détail suivant : un catalogue de bibliothèques concrètes. Une fois le langage choisi, il reste à sélectionner les outils — en voici un panorama, organisé par langage et par rôle, avec des liens vers les sites officiels.

Quatre rôles de bibliothèques

Avant d'énumérer les packages, il est important de comprendre que presque tout scraper s'assemble à partir d'outils de quatre types. Souvent, une bibliothèque n'est pas utilisée seule mais en combinaison : par exemple, le client HTTP télécharge le HTML et le parseur l'analyse.

  • Clients HTTP. Ils envoient des requêtes et reçoivent la réponse (HTML, JSON). Rapides et légers, mais ils n'exécutent pas JavaScript — ils ne voient que ce que le serveur a renvoyé. Adaptés aux pages statiques et aux appels directs à l'API d'un site.
  • Parseurs HTML/XML. Ils transforment une chaîne HTML en arbre, dans lequel on peut rechercher des données via des sélecteurs CSS ou XPath. Ils ne téléchargent rien eux-mêmes — on leur fournit le HTML en entrée.
  • Automatisation de navigateur (headless). Ils lancent un véritable navigateur (le plus souvent Chromium), exécutent JavaScript, savent cliquer, faire défiler, remplir des formulaires, attendre l'apparition d'éléments. Indispensables pour les SPA et le contenu dynamique, mais gourmands en ressources.
  • Frameworks complets. Ils prennent en charge toute la chaîne : file de requêtes, concurrence, tentatives répétées, traitement et sauvegarde des données (pipelines). Adaptés aux projets réguliers et à grande échelle, où ce n'est pas une page qui compte, mais des milliers.

Voici maintenant les bibliothèques par langage, regroupées selon ces rôles.


Python

Clients HTTP : requests — le classique, synchrone et simple ; httpx — remplaçant moderne avec support async et HTTP/2 ; aiohttp — client asynchrone pour les fortes charges ; curl_cffi — imite l'empreinte TLS d'un vrai Chrome et aide à contourner les protections anti-bot de base sans navigateur.

Parseurs : BeautifulSoup — le plus accessible pour les débutants ; lxml — rapide, écrit en C, avec support XPath ; parsel — moteur de sélecteurs issu de l'écosystème Scrapy ; selectolax — le plus rapide sur de gros volumes ; pyquery — syntaxe à la jQuery.

Automatisation de navigateur : Playwright — le choix moderne par défaut (async, attentes automatiques) ; Selenium — le vétéran, avec une communauté immense ; SeleniumBase — surcouche de Selenium avec mode furtif ; nodriver — outil stealth de l'auteur d'undetected-chromedriver (ce dernier est en grande partie obsolète et passe moins bien les protections modernes).

Frameworks : Scrapy — standard mature pour le crawling à grande échelle avec pipelines ; Crawlee for Python — hybride, bascule entre HTTP et navigateur ; MechanicalSoup — gestion légère des formulaires et des sessions ; Scrapling — nouveau parseur adaptatif, résistant aux changements de mise en page.


JavaScript / Node.js

Clients HTTP : le fetch natif ; axios — le client le plus populaire, avec une API pratique ; got — léger et rapide ; undici — client haute performance de l'équipe Node.js.

Parseurs : cheerio — analyse rapide du HTML statique à la jQuery ; jsdom — émulation complète du DOM (plus lourd que cheerio) ; parse5 et htmlparser2 — parseurs bas niveau sur lesquels reposent d'autres outils.

Automatisation de navigateur : Puppeteer — pilotage de Chrome/Chromium ; Playwright — la même chose avec support multi-navigateurs et une API épurée ; puppeteer-extra — plugins, dont le mode stealth pour le camouflage.

Frameworks : Crawlee — framework puissant d'Apify avec files d'attente, proxys et bascule automatique HTTP/navigateur ; node-crawler — crawler classique avec pool de requêtes.


PHP

Clients HTTP : Guzzle — le standard de facto, compatible PSR ; Symfony HttpClient — client moderne de l'écosystème Symfony ; le cURL natif.

Parseurs : Symfony DomCrawler — analyse via sélecteurs CSS et XPath ; DiDOM — rapide et simple ; Simple HTML DOM — la barrière d'entrée la plus basse, digère le HTML « cassé ».

Navigation et navigateur : Symfony BrowserKit (classe HttpBrowser) — émulation de navigateur en pur PHP, suit les liens et envoie les formulaires, mais n'exécute pas JS (c'est ici qu'a migré l'ancien Goutte) ; Symfony Panther et php-webdriver — pilotage d'un vrai Chrome/Firefox pour le contenu dynamique ; chrome-php — pilotage direct de Chrome.

Frameworks : Roach PHP — équivalent complet de Scrapy pour PHP, avec pipelines et middleware ; crwlr — framework composé de « steps » prêts à l'emploi pour construire des crawlers.


Go (Golang)

Clients HTTP : net/http — puissante bibliothèque standard ; resty — wrapper pratique à l'API concise.

Parseurs : goquery — analyse à la jQuery (sélecteurs CSS) ; htmlquery — extraction via XPath.

Automatisation de navigateur : chromedp — le standard du secteur, pilotage de Chrome via le DevTools Protocol ; Rod — alternative moderne à l'API agréable ; playwright-go — portage de Playwright.

Frameworks : Colly — framework concurrent rapide pour le contenu statique ; Geziyor — framework avec support du rendu JS ; Ferret — extraction de données via son propre langage de requêtes déclaratif.


C / C++

Dans cette niche, il n'existe presque pas de frameworks de haut niveau — on assemble soi-même la combinaison « client HTTP + parseur », pour une vitesse maximale et une consommation mémoire minimale.

Clients HTTP : libcurl — bibliothèque fondamentale, sur laquelle reposent les clients de la plupart des langages ; CPR — wrapper C++ moderne autour de libcurl, dans l'esprit de Python requests.

Parseurs : libxml2 — parseur HTML/XML mature ; Gumbo — parseur HTML5 de Google ; lexbor — moteur HTML/CSS moderne et rapide ; pugixml — parseur XML léger pour les sitemaps et les flux RSS.

Pas d'exécution de JavaScript par défaut — si nécessaire, on intègre un moteur de navigateur embarqué ou un headless externe.


C# / .NET

Clients HTTP : HttpClient — le client intégré de .NET ; RestSharp — wrapper pratique pour les requêtes REST.

Parseurs : HtmlAgilityPack — le plus populaire, tolère le HTML « cassé », supporte XPath ; AngleSharp — conforme aux normes W3C, avec querySelector comme dans un navigateur ; Fizzler — moteur de sélecteurs CSS au-dessus de HtmlAgilityPack.

Automatisation de navigateur : PuppeteerSharp — portage de Puppeteer ; Playwright for .NET — portage officiel de Playwright ; Selenium WebDriver.

Frameworks : DotnetSpider — framework dans l'esprit de Scrapy ; Abot — crawler configurable.


Java

Clients HTTP : Apache HttpClient — standard mature ; OkHttp — client moderne et rapide.

Parseurs : Jsoup — l'outil principal pour analyser le HTML en Java, avec des sélecteurs CSS pratiques.

Automatisation de navigateur : HtmlUnit — navigateur headless écrit en Java, avec support partiel de JS ; Selenium et Playwright for Java — pilotage d'un vrai navigateur.

Frameworks : WebMagic — framework dans le style de Scrapy ; Crawler4j — crawler simple et rapide.


Ruby

Clients HTTP : Faraday — client flexible avec middleware ; HTTParty — concis et simple.

Parseurs : Nokogiri — le standard pour l'analyse HTML/XML en Ruby (CSS et XPath).

Automatisation de navigateur : Ferrum — pilotage de Chrome via CDP ; Watir et Selenium — un vrai navigateur.

Navigation et frameworks : Mechanize — suit les liens et gère les formulaires (sans JS) ; Kimurai — framework dans l'esprit de Scrapy avec support des moteurs headless.


Rust

Clients HTTP : reqwest — le principal client async ; ureq — synchrone et simple.

Parseurs : scraper — sélecteurs CSS, dans l'esprit de BeautifulSoup/Cheerio ; select — parseur à sélecteurs alternatif.

Automatisation de navigateur : fantoccini et thirtyfour — pilotage de navigateur via WebDriver ; headless_chrome et chromiumoxide — travail avec Chrome via le DevTools Protocol.

Frameworks : spider — crawler concurrent haute performance.


Tableau comparatif des bibliothèques

Bibliothèque Langage Type Exécute JS Async / concurrence Point fort
requests Python Client HTTP Non Non Référence en simplicité
httpx Python Client HTTP Non Oui Async + HTTP/2
curl_cffi Python Client HTTP Non Oui Imitation de l'empreinte TLS
BeautifulSoup Python Parseur Barrière d'entrée basse
selectolax Python Parseur Le plus rapide sur gros volumes
Playwright Python Navigateur Oui Oui Attentes auto, multi-navigateurs
Selenium multi-langages Navigateur Oui Partiellement Vétéran, communauté immense
Scrapy Python Framework Non* Oui Standard du crawling à grande échelle
cheerio JS / Node Parseur Analyse jQuery rapide du statique
Puppeteer JS / Node Navigateur Oui Oui Pilotage natif de Chrome
Playwright JS / Node Navigateur Oui Oui Multi-navigateurs, API épurée
Crawlee JS / Node Framework Oui Oui Bascule auto HTTP/navigateur
Guzzle PHP Client HTTP Non Oui Standard de facto en PHP
Symfony DomCrawler PHP Parseur Sélecteurs CSS et XPath
Symfony Panther PHP Navigateur Oui Non Un vrai navigateur pour PHP
Roach PHP PHP Framework Non* Oui Équivalent de Scrapy pour PHP
Colly Go Framework Non Oui Un crawling concurrent rapide
goquery Go Parseur Syntaxe jQuery
chromedp Go Navigateur Oui Oui Standard du dynamique en Go
Rod Go Navigateur Oui Oui API moderne
libcurl C / C++ Client HTTP Non Oui Fondation pour tous les langages
lexbor C / C++ Parseur Moteur HTML/CSS rapide
HtmlAgilityPack C# Parseur Tolère le HTML « cassé »
AngleSharp C# Parseur Conforme W3C, querySelector
PuppeteerSharp C# Navigateur Oui Oui Puppeteer pour .NET
Jsoup Java Parseur Le parseur principal en Java
HtmlUnit Java Navigateur Partiellement Oui Navigateur headless en pur Java
WebMagic Java Framework Non Oui Style Scrapy pour Java
Nokogiri Ruby Parseur Standard de l'analyse en Ruby
Ferrum Ruby Navigateur Oui Oui Pilotage de Chrome via CDP
Kimurai Ruby Framework Oui Oui Style Scrapy pour Ruby
reqwest Rust Client HTTP Non Oui Le principal client async
scraper Rust Parseur Sélecteurs CSS
thirtyfour Rust Navigateur Oui Oui Pilotage via WebDriver
spider Rust Framework Oui Oui Haute performance

* Les frameworks Scrapy et Roach PHP ne traitent par eux-mêmes que le HTML statique, mais le rendu JS s'ajoute via un plugin (Scrapy — via scrapy-playwright, Roach — via Browsershot). Le signe « — » dans une colonne signifie que le critère ne s'applique pas à ce type de bibliothèque.


Comment assembler une combinaison efficace

La logique courte du choix des outils selon la tâche :

  • Page statique ou requête directe vers une API — un client HTTP et un parseur suffisent : par exemple, requests + BeautifulSoup, Guzzle + DomCrawler, net/http + goquery.
  • Le contenu se charge via JavaScript, il faut cliquer et faire défiler — optez pour l'automatisation de navigateur : Playwright, Puppeteer, chromedp.
  • Des milliers de pages, un lancement régulier, traitement et stockage des données — il faut un framework : Scrapy, Crawlee, Colly, Roach PHP.
  • Le site bloque activement les bots — ajoutez une couche dédiée : imitation de l'empreinte TLS (curl_cffi), modes stealth (nodriver, puppeteer-extra), proxys. Cela fonctionne par-dessus n'importe laquelle des bibliothèques ci-dessus et ne dépend pas du langage choisi.

Dans les prochains articles, nous examinerons ces bibliothèques à travers des exemples pratiques — collecte de données, pagination et contournement des blocages.