Web scraping avec Python : guide complet pour 2026

Entreprises
Créez votre propre outil de scraping web avec Python en partant de zéro. Le guide étape par étape pour choisir les bibliothèques, extraire des données et automatiser l'analyse avec ELECTE.

Vous êtes sans doute confronté à une situation bien concrète. Vous avez besoin de prix compétitifs, d'annonces, d'avis, de catalogues, de données publiques ou de contenus provenant de portails spécialisés. L'alternative est presque toujours la même : copier-coller manuel, exportations incomplètes, API limitées ou données dispersées sur des pages que personne dans l'entreprise ne parvient à rassembler de manière systématique.

C'est là qu'un outil de scraping web en Python cesse d'être un simple exercice technique pour devenir un atout opérationnel. Python est le choix le plus pratique lorsque l'on souhaite transformer des pages web en ensembles de données nettoyés, car il permet de commencer par des scripts simples, puis d'évoluer vers des robots d'indexation plus avancés, l'automatisation des navigateurs et des pipelines d'analyse.

Dans le contexte italien, cette question revêt une importance encore plus grande. Python est désormais la norme dans le domaine de l'automatisation et de l'analyse de données, et le scraping est l'une des applications les plus utilisées en entreprise. Mais ce ne sont pas ceux qui « récupèrent des données » qui font vraiment la différence. Ce sont ceux qui savent choisir la bonne bibliothèque, éviter les erreurs classiques, respecter le RGPD et les conditions d'utilisation, et fournir des données que l'entreprise peut lire et exploiter.

Table des matières

  • Principaux points à retenir
  • Conclusion : commencez à exploiter la puissance des données Web
  • Introduction : Faire du Web une source de données stratégiques

    La plupart des premiers projets de scraping partent d'un besoin simple : surveiller les prix d'un concurrent, collecter des titres sur un portail spécialisé, dresser une liste de produits, suivre des appels d'offres ou des annonces. Le problème n'est pas de trouver les données. Le problème est de les collecter de manière reproductible, propre et suffisamment fiable pour pouvoir s'en servir dans la prise de décision.

    Un web scraper en Python résout justement ce problème. Il vous permet de consulter une page, d'en télécharger le contenu, d'identifier les éléments utiles et de les enregistrer dans un format structuré. Si vous vous y prenez bien dès le départ, vous pouvez transformer une tâche manuelle et fastidieuse en un processus stable.

    Ce que les tutoriels omettent souvent, c'est justement l'aspect le plus important du travail concret. Il ne suffit pas de « faire du scraping ». Il faut choisir le bon niveau de complexité. Requests et BeautifulSoup suffisent pour de nombreux sites. D'autres nécessitent Selenium ou Playwright, car le contenu est généré par JavaScript. Pour les projets de plus grande envergure, c'est là que Scrapy entre en jeu. Et lorsque les données concernent des personnes, des profils ou des coordonnées, il faut également respecter un cadre juridique précis.

    Un bon scraper n'est pas celui qui extrait le plus de données. C'est celui qui extrait les bonnes données, avec le moindre coût de maintenance.

    Pourquoi Python est l'outil idéal pour le web scraping

    Une jeune femme à lunettes regarde l'écran de son ordinateur, sur lequel s'affiche du code de programmation en Python.

    Python domine ce domaine pour une raison pratique. Il permet de passer très rapidement d’une idée à un script fonctionnel, sans trop faire de concessions lorsque le projet prend de l’ampleur. Sur le marché italien, il ne s'agit pas seulement d'une préférence technique. Selon les données 2023 de l'Observatoire de l'innovation numérique de l'École polytechnique de Milan, Python est adopté par 75 % des entreprises italiennes pour l'analyse de données et l'automatisation, le web scraping figurant parmi les principales applications. Dans le même ordre d'idées, en 2022, 40 % des PME lombardes ont mis en place des scrapers Python pour surveiller les prix de la concurrence, ce qui a entraîné une augmentation de 25 % de la compétitivité dans le commerce de détail, comme le rapporte la page de référencede l'Université du Texas sur le scraping avec Python.

    Python fonctionne bien car il réduit les frictions

    Le principal atout de Python, c'est sa lisibilité. Que ce soit pour expliquer un script à un collègue, déboguer des sélecteurs HTML ou modifier la logique d'extraction dans deux semaines, la clarté du code compte plus qu'on ne le pense.

    La deuxième force réside dans l'écosystème. Il existe des bibliothèques bien établies pour presque tous les niveaux de travail :

    • Requêtes pour télécharger du code HTML ou interroger des points de terminaison.
    • BeautifulSoup pour parcourir le DOM et extraire du texte, des liens et des attributs.
    • Selenium et Playwright pour les sites qui dépendent du rendu du navigateur.
    • Scrapy, lorsque vous devez organiser vos robots d'indexation, vos pipelines, vos tentatives de récupération et vos exportations de manière plus industrielle.
    • Pandas: l'étape suivante consiste à nettoyer et à analyser les données.

    Le bon choix dépend de l'emplacement

    C'est là que beaucoup de débutants se trompent. Ils voient Selenium et pensent que c'est toujours la meilleure solution. Ce n'est pas le cas.

    Pour une page statique, utiliser un navigateur complet revient à consommer davantage de ressources, à écrire un code plus lent et à multiplier les points de défaillance. À l'inverse, se contenter d'utiliser Requests sur un site qui charge les données via JavaScript aboutit à un résultat classique : un code HTML presque vide et aucune donnée utile.

    Il vaut mieux raisonner ainsi :

    • Site simple et code HTML déjà disponible. Commence par Requests + BeautifulSoup.
    • Site dont le contenu s'affiche après le chargement. Passez à Playwright ou Selenium.
    • Beaucoup de pages, une structure récurrente, un besoin d'exploration. Envisagez d'utiliser Scrapy.
    • Les données sont disponibles via un point de terminaison JSON. Il est préférable d'utiliser ce point de terminaison plutôt que d'analyser le code HTML.

    Règle d'or : choisissez toujours l'outil le plus simple qui permette réellement de lire les données dont vous avez besoin.

    Un autre avantage de Python est que cette transition se fait progressivement. Vous n'avez pas besoin de tout réécrire à chaque fois. Souvent, vous pouvez conserver la logique d'analyse et ne modifier que la manière dont vous récupérez la page.

    Choisir les bibliothèques Python adaptées à chaque tâche

    La meilleure façon de choisir une bibliothèque n'est pas de se demander laquelle est « la meilleure ». La bonne question est tout autre : quel type de site dois-je mettre en ligne, quelle doit être la durée de ce projet et quel niveau de maintenance puis-je me permettre ?

    Infographie présentant les bibliothèques Python recommandées pour le scraping de sites web statiques et dynamiques.

    Un rapport de 2025 publié par Unioncamere Lombardia indique que de nombreuses entreprises technologiques lombardes utilisent Python pour le scraping, contribuant ainsi de manière significative à la valeur économique régionale. Dans le même contexte, Scrapy affiche un taux d'adoption de 45 % parmi les développeurs italiens et Selenium est utilisé dans 55 % des projets nécessitant une interaction avec des sites JavaScript, avec une réduction de 90 % des blocages par CAPTCHA lorsqu'il est associé à un proxy, selon la page de référence de ScraperAPI consacrée au scraping avec Python.

    Une pile légère pour les pages statiques

    Si le contenu figure déjà dans le code HTML initial, ne te complique pas la tâche.

    Requests + BeautifulSoup reste le point de départ le plus judicieux pour :

    • sites éditoriaux à structure régulière
    • répertoires publics simples
    • pages produit générées côté serveur
    • pages de résultats sans interactions particulières

    Cette pile est idéale lorsque vous souhaitez :

    • lancer rapidement un scraper
    • déboguer facilement
    • enregistrer les données au format CSV ou JSON
    • veiller à ce que le code reste lisible même pour les collègues non spécialistes

    Un exemple tout simple :

    import requests from bs4 import BeautifulSoup url = "https://example.com/news" response = requests.get(url, timeout=20) response.raise_for_status()soup = BeautifulSoup(response.text, "html.parser")for article in soup.select("article"):title = article.select_one("h2")link = article.select_one("a")if title and link:print(title.get_text(strip=True), link.get("href"))

    Cette méthode fonctionne bien tant que les données se trouvent effectivement dans le code source HTML. Avant de l'utiliser, ouvrez « Afficher le code source de la page », et pas seulement « Inspecter ». Si les données ne figurent pas dans le code source, Requests ne suffit pas à lui seul.

    Quand il faut un vrai navigateur

    Si vous constatez un chargement asynchrone, des boutons « Charger plus », un défilement infini, des contenus générés par des frameworks front-end ou des interactions utilisateur obligatoires, alors le parseur HTML seul ne suffit pas à résoudre le problème.

    C'est là que Selenium et Playwright entrent en jeu.

    Selenium est un choix fiable et très répandu. Il convient particulièrement lorsque vous avez besoin de :

    • cliquer sur les boutons
    • remplir les champs
    • attendre que les éléments soient chargés par le navigateur
    • gérer des sites complexes avec des flux d'utilisateurs

    Playwright a pour objectif d'offrir une API plus moderne et plus épurée. Si vous vous lancez aujourd'hui, de nombreuses équipes trouvent qu'il est plus intuitif pour :

    • des prévisions plus fiables
    • prise en charge de plusieurs navigateurs
    • automatisation headless structurée
    • Interactions sur les applications monopages (SPA) et les interfaces modernes

    Compromis réel : l'automatisation des navigateurs offre plus de puissance, mais entraîne également une consommation de mémoire plus importante, des délais plus longs et davantage de maintenance.

    Si tu peux lire une API JSON dans le trafic réseau, n'hésite pas à le faire. C'est presque toujours plus fiable que de simuler des clics et des défilements.

    Quand le projet cesse d'être un simple scénario

    Il arrive un moment où l'on ne se contente plus de « faire du scraping ». On met en place un processus.

    C'est là que Scrapy devient intéressant. Non pas parce qu'il est plus simple, mais parce qu'il permet une meilleure organisation :

    • files d'attente
    • gestion de la mise en page
    • réessayer
    • limitation
    • chaîne de nettoyage
    • exportations structurées

    Je le recommande lorsque vous devez travailler sur de nombreuses catégories, de nombreuses pages ou plusieurs domaines avec des logiques récurrentes. Pour une extraction ponctuelle, c'est souvent trop. En revanche, pour un robot d'indexation fonctionnant en continu, cela vous évite de réinventer des composants que vous disperseriez autrement dans des scripts distincts.

    Tu peux également adopter une approche hybride :

    1. Demandes de tests rapides.
    2. Playwright pour vérifier les cas dynamiques.
    3. Scrapy lorsque le processus passe en production.

    Tableau comparatif rapide

    BibliothèqueCas d'utilisation idéalGestion JavaScriptCourbe d'apprentissageVitesseRequestsPages statiques, API, prototypes rapidesNonFaibleÉlevéeBeautifulSoupAnalyse HTML simple et lisibleNonFaibleMoyenneSeleniumInteraction avec le navigateur, formulaires, clics, sites dynamiquesOuiMoyenneFaiblePlaywrightSites dynamiques modernes, attentes plus solidesOuiMoyenneMoyenneScrapyExploration à grande échelle, processus structurésNon native, doit être étendueÉlevéeÉlevée

    Guide pratique pour créer votre premier scraper

    La première version d'un scraper doit savoir faire quelques choses correctement. Lire une page. Trouver les bons éléments. Nettoyer le texte. Enregistrer le résultat dans un format utile. Rien de plus.

    Une personne qui écrit du code Python pour le web scraping sur un ordinateur, dans un bureau lumineux à domicile.

    Préparer le local et les dépendances

    Veillez à ce que le projet reste isolé. Un environnement virtuel vous évite les conflits et rend le travail reproductible.

    N'installez que le strict nécessaire :

    pip install requests beautifulsoup4

    Structure initiale de base :

    • scraper.py pour le code
    • output.csv pour l'exportation
    • un fichier README interne contenant les URL cibles, les sélecteurs utilisés et des remarques opérationnelles

    Cela peut paraître banal, mais le fait de répertorier dès le départ les sélecteurs utilisés vous fera gagner du temps lorsque le site changera.

    Vérifiez la page avant d'écrire du code

    Ouvre la page cible dans ton navigateur et utilise les outils de développement. Cherche les nœuds qui contiennent réellement les données qui t'intéressent.

    Supposons que l'on veuille extraire :

    • titre de l'article
    • lien vers l'article

    Vérifie trois choses :

    1. Le contenu se trouve-t-il dans le code source HTML ?
    2. Les éléments ont-ils des classes ou des balises assez stables ?
    3. Le lien est-il absolu ou relatif ?

    Évitez les sélecteurs fragiles, comme les classes générées automatiquement par le frontend. Si vous pouvez sélectionner un article, un h2 ou une zone présentant une structure cohérente, ton scraper durera plus longtemps.

    Écrire un scraper basique avec Requests et BeautifulSoup

    Voici un exemple complet et clair.

    import csvimport requestsfrom bs4 import BeautifulSoupfrom urllib.parse import urljoinBASE_URL = "https://example.com"TARGET_URL = "https://example.com/news"headers = {"User-Agent": "Mozilla/5.0"}response = requests.get(TARGET_URL, headers=headers, timeout=20)response.raise_for_status()soup = BeautifulSoup(response.text, "html.parser")rows = []for card in soup.select("article"):title_el = card.select_one("h2")link_el = card.select_one("a")if not title_el or not link_el:continuetitle = title_el.get_text(strip=True)link = urljoin(BASE_URL, link_el.get("href", "").strip())if title and link:rows.append({"titolo": title,"url": link})with open("output.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=["titolo", "url"])writer.writeheader()writer.writerows(rows)print(f"Elementi estratti: {len(rows)}")

    Pour un premier web scraper en Python, cette structure est déjà largement suffisante.

    Le flux est linéaire :

    • téléchargez la page
    • crée le parseur
    • sélectionnez les blocs répétés
    • extraire les champs
    • enregistrez le résultat

    Nettoyer et enregistrer les résultats

    C'est ici que se joue la qualité des données. Les problèmes les plus courants ne sont pas d'ordre technique. Ils sont d'ordre opérationnel :

    • titres comportant des espaces supplémentaires
    • liens connexes
    • lignes en double
    • encodage irrégulier
    • champs vides

    Avant d'importer le fichier CSV, ouvrez-le pour vérifier son contenu. Si le fichier est destiné à être importé dans Excel, il est préférable de s'assurer que les colonnes et les caractères sont lisibles. Si vous avez besoin d'aide pour cette étape, ce guide ELECTE la gestion des fichiers CSV dans Excel pourrait vous être utile.

    Un scraper qui génère un fichier CSV erroné ne fait que déplacer le problème en aval. Il ne le résout pas.

    De bonnes habitudes à adopter dès maintenant :

    • Utilisation strip() pour nettoyer le texte.
    • Vérifie les champs obligatoires avant d'enregistrer.
    • Normalise les URL avec urljoin.
    • Vérifie s'il y a des doublons si la page contient des éléments en double.
    • Gérer les erreurs HTTP avec raise_for_status().

    Si le résultat te semble fragile, c'est qu'il l'est. Avant d'ajouter de nouvelles fonctionnalités, assure-toi que la base est solide.

    Surmonter les obstacles avancés tels que JavaScript et les mesures anti-bot

    Une programmeuse travaille sur son ordinateur avec des graphiques complexes illustrant le processus de web scraping et de rendu des données.

    Lorsqu'un scraper renvoie une page presque vide, le problème ne vient généralement pas de Python. Le problème réside dans le modèle de rendu du site. De nombreuses interfaces modernes chargent les données après le code HTML initial, via des requêtes asynchrones ou des composants JavaScript. Requests télécharge le document initial. Il n'exécute pas le navigateur.

    Comprendre pourquoi une page renvoie des données vides

    Avant de passer à Selenium ou Playwright, jette un coup d'œil rapide aux outils de développement :

    • vérifie la carte réseau
    • filtrer les requêtes Fetch/XHR
    • Rechercher des réponses JSON
    • vérifie si les données utiles proviennent de terminaux distincts

    Si vous trouvez une interface API propre et lisible, c'est souvent la meilleure solution. Vous obtenez des données mieux structurées, moins de bruit HTML et moins de maintenance.

    Si, en revanche, le site génère réellement le contenu dans le navigateur, il utilise l'automatisation du navigateur. Dans ce cas, il faut définir des délais d'attente appropriés. La bonne approche n'est pas de « patienter 5 secondes en croisant les doigts ». Il s'agit d'attendre la présence de l'élément ou la satisfaction d'une condition observable.

    On ne combat pas les défenses anti-bots par la force brute

    De nombreux sites bloquent les pratiques de scraping agressives afin de protéger leur infrastructure, leurs données et l'expérience utilisateur. Si vous envoyez trop de requêtes, utilisez des en-têtes inhabituels ou ouvrez des sessions de navigateur de manière répétitive, le site réagira.

    Les erreurs les plus courantes sont toujours les mêmes :

    • Des requêtes trop rapides qui déclenchent la limitation du débit.
    • Des en-têtes médiocres ou incohérents qui trahissent un script.
    • Sessions sans état lorsque le site attend des cookies ou des jetons.
    • Des sélecteurs fonctionnant par clics répétés qui tombent en panne dès qu'on change d'interface utilisateur.

    L'approche professionnelle est plus sobre :

    • Le rythme des demandes ralentit.
    • Utilisez les sessions lorsque la continuité est nécessaire.
    • Définissez des en-têtes crédibles et cohérents.
    • Limitez le nombre de pages consultées aux seules informations vraiment nécessaires.
    • Privilégiez les points de terminaison structurés au rendu complet lorsque cela est possible.

    Il ne sert à rien de se lancer dans toutes les mesures anti-bots comme s'il s'agissait d'un défi technique. Si le site est clairement hostile au scraping, demandez-vous si les données sont réellement accessibles de manière durable et conforme.

    Concevoir des scrapers résilients, c'est réduire les frictions avec le site, et non pas gagner une course contre ses défenses.

    Le scraping éthique et légal dans le respect du RGPD en Italie

    L'aspect le plus souvent négligé dans les projets de scraping n'est pas le parseur. C'est la responsabilité. Dans le contexte italien, cela revêt une importance bien plus grande lorsque les données concernent des personnes, des profils professionnels, des CV, des coordonnées ou des informations provenant de portails d'emploi.

    Selon les données de l'AGID pour 2025, plusieurs PME italiennes ont été condamnées à des amendes pour des infractions liées au scraping de données de l'UE, avec un nombre considérable de sanctions en Lombardie et en Vénétie en 2024-2025. Dans le même document, il est précisé que le scraping de noms à partir de portails d'emploi peut entraîner des risques pénaux au sens de l'article 167 du décret législatif 196/03. Cette mention figure dans le guide pratique de Real Python sur le web scraping.

    « Public » ne signifie pas « libre d'utilisation »

    C'est le premier malentendu qu'il faut dissiper. Le fait qu'une donnée soit accessible en ligne ne signifie pas que vous pouvez la collecter, la combiner, la conserver et la réutiliser sans aucune limite.

    Dans un travail sérieux, il faut vérifier au moins quatre éléments :

    • Robots.txt. Ce n'est pas le seul critère juridique, mais il indique l'orientation du site.
    • Conditions d'utilisation. Certains sites interdisent expressément l'extraction automatique ou la réutilisation.
    • Présence de données à caractère personnel. Noms, adresses e-mail, profils, avis permettant d'identifier les personnes, CV.
    • Finalités du traitement. Vous devez savoir pourquoi vous collectez ces données, combien de temps vous les conservez et qui y a accès.

    Pour vous aider à vous y retrouver en matière de consentement, de collecte de données et de conformité, cet article détaillé ELECTE les cookies et la confidentialité en ligne, les réglementations de l'UE par rapport à celles des États-Unis, le mode « Consent » de Google et la gestion des consentements vous sera également utile.

    Une liste de contrôle minimale de conformité

    Si vous devez développer un scraper au sein d'une entreprise, ce principe de base est incontournable :

    • Limitez le champ d'application. Ne collectez que les données nécessaires à la finalité déclarée.
    • Évitez de collecter des données personnelles non indispensables. Si elles ne sont pas nécessaires, ne les collectez pas.
    • Pseudonymisez ou anonymisez les données dès que possible, dès la phase de traitement.
    • Indiquez la provenance des données et la logique de collecte.
    • Définissez des délais de conservation adaptés à l'utilisation réelle.

    Le but ici n'est pas de devenir avocat. Il s'agit de travailler en professionnels. Un scraper bien conçu n'est pas seulement efficace. Il est aussi défendable.

    De l'extraction à l'action grâce à la plateforme ELECTE

    De nombreux projets s'arrêtent trop tôt. L'équipe parvient à extraire les données, enregistre un fichier CSV et met peut-être à jour ce fichier chaque semaine. Puis le processus s'arrête là. Sans nettoyage, comparaison historique, reporting ni prévision, la valeur ajoutée reste partielle.

    Comment organiser la transition des données vers les informations exploitables

    Voici le passage pertinent :

    1. Extraire des données cohérentes à partir de sources web.
    2. Normaliser les champs, les formats, la nomenclature et les clés.
    3. Contextualiser les relevés.
    4. Comparer les variations, les exceptions et les tendances.
    5. Analyser les données dans un environnement qui permette également aux services opérationnels de les comprendre.

    Si vous travaillez dans le commerce de détail, cela peut signifier surveiller les prix de la concurrence et les promotions au fil du temps. Dans le domaine de la finance ou de la conformité, cela peut signifier enrichir les contrôles et les listes de surveillance à l'aide de sources publiques. En marketing, les avis et les contenus rédactionnels peuvent alimenter les classements qualitatifs et les analyses de tendances.

    Lorsque le flux devient récurrent, il est préférable de relier le scraping à un système d'analyse plutôt qu'à un dossier de fichiers locaux. Pour ceux qui doivent intégrer des données collectées à partir de sources externes dans un écosystème plus large, il peut être utile de voir également comment ELECTE l'intégration via API avec un profil Postman vérifié.

    Le principe est simple. Le scraping permet de collecter des données brutes. La valeur ajoutée apparaît lorsque ces données brutes sont intégrées à un processus décisionnel.

    Principaux points à retenir

    • Python est le choix le plus judicieux lorsque vous souhaitez créer un scraper lisible, évolutif et pouvant être intégré à l'analyse de données.
    • Le choix de la bibliothèque appropriée dépend du site. Requests et BeautifulSoup pour le HTML statique. Playwright ou Selenium pour les contenus dynamiques. Scrapy pour les tâches plus complexes.
    • La première chose à faire, c'est de comprendre la page, pas d'écrire du code.
    • Les données brutes ne suffisent pas. Elles doivent être nettoyées, validées et enregistrées dans un format réutilisable.
    • Le RGPD, les conditions d'utilisation et les données à caractère personnel ne sont pas des détails secondaires. Ils font partie intégrante du projet.
    • Un scraper web en Python n'a de sens que s'il permet de prendre de meilleures décisions, et non s'il génère des fichiers qui finissent par être oubliés.

    Conclusion : commencez à exploiter la puissance des données Web

    Pour créer un bon scraper, il faut faire des choix judicieux. Le bon outil pour le bon site. Des sélecteurs stables. Un résultat propre. Un rythme de requêtes contrôlé. Une attention particulière aux aspects juridiques dès le départ.

    C'est pourquoi le web scraper avec Python reste l'un des outils les plus utiles pour les analystes, les équipes numériques et les PME. Il vous permet de transformer le Web en une source de données exploitable, sans dépendre uniquement d'exportations manuelles ou d'intégrations limitées.

    Mais l'objectif final n'est pas l'extraction. C'est l'utilisation. Si vous reliez les données collectées à des rapports, des tendances, des alertes et des données historiques, le scraping cesse d'être une tâche technique pour devenir un véritable outil d'aide à la décision.

    Vous avez déjà collecté les données. La prochaine étape consiste à les transformer en informations claires et exploitables. Avec ELECTE, une plateforme d'analyse de données basée sur l'IA pour les PME, vous pouvez relier différentes sources, préparer les données plus rapidement et obtenir des rapports et des analyses qui aident réellement l'entreprise à prendre des décisions. Si vous souhaitez passer de fichiers bruts à une prise de décision plus rapide, cela vaut la peine de découvrir comment cela fonctionne.