Comment extraire des images : un guide pratique pour 2026

Comment extraire des images : un guide pratique pour 2026

Vous en avez assez que les interdictions d'adresses IP ralentissent vos opérations ? Déployez nos proxys résidentiels pour une rotation à grande vitesse ou nos proxys FAI sécurisés pour garantir la pérennité totale de vos comptes.

Extraire des images semble simple : il suffit de trouver les URL et de télécharger les fichiers. En réalité, le Web moderne complique presque chaque étape de ce processus bien plus qu’il ne le devrait : les galeries se chargent progressivement au fur et à mesure du défilement, les URL des images sont signées par les CDN, la version en haute qualité n’est accessible qu’en survolant l’image, et tout site digne d’intérêt dispose de mesures anti-bots qui détecteront un script naïf après quelques centaines de requêtes.

Ce guide présente les méthodes qui fonctionnent réellement en 2026, des extensions de navigateur ponctuelles aux pipelines Python prêts pour la production, sans oublier les aspects que la plupart des tutoriels négligent : la gestion du contenu généré par JavaScript, les solutions pour contourner la protection contre les liens directs, ainsi que les aspects juridiques et éthiques qu’il devient de plus en plus difficile d’ignorer.

Choisissez votre méthode en fonction de vos besoins réels

On distingue globalement quatre niveaux de « scraping » d'images, et le choix de l'outil approprié dépend du volume, de la cible et de la fréquence à laquelle vous comptez effectuer cette opération.

Niveau 1 — Opération ponctuelle, petit volume, un seul site. Utilisez une extension de navigateur ou cliquez avec le bouton droit de la souris pour enregistrer. Tout autre moyen serait superflu.

Niveau 2 — De quelques dizaines à quelques centaines d'images provenant d'un même site. Un extracteur d'images dédié ou un simple script Python parcourant une seule page.

Niveau 3 — Des milliers d'images réparties sur de nombreuses pages ou sites. Un véritable script de scraping doté d'une limitation de débit adéquate, d'une logique de réessai et d'un système de stockage.

Niveau 4 — Collecte continue et à grande échelle (données d'entraînement pour l'apprentissage en machine, études de marché continues). Un pipeline de production avec des proxys tournants, la prise en charge des navigateurs sans interface graphique et un véritable entrepôt de données.

La plupart des articles consacrés à ce sujet confondent ces deux notions. L'approche à adopter pour le niveau 1 est véritablement différente de celle du niveau 4 ; il ne s'agit pas simplement d'une version réduite de cette dernière.

Niveau 1 : Extensions de navigateur

Pour récupérer une douzaine d'images à partir d'une seule page, les extensions de navigateur restent la solution la plus rapide. Celles qui valent la peine d'être installées aujourd'hui :

  • Téléchargeur d'images (Chrome) — téléchargement groupé simple avec filtrage par dimensions et type de fichier. Ce qui se rapproche le plus d'un paramètre par défaut universel.
  • Imageye (Chrome, Edge) — ensemble de fonctionnalités similaire, interface utilisateur pratique pour filtrer par taille et format.
  • DownThemAll! (Firefox) — un grand classique qui existe depuis longtemps, toujours mis à jour, et qui prend en charge bien plus que les simples images.

Évitez les extensions qui n’ont pas été mises à jour depuis plus d’un an (bon nombre des outils de « téléchargement par double-clic » de la génération 2020 sont désormais abandonnés ou discrètement malveillants — la boutique d’extensions de Chrome est un véritable cimetière depuis un certain temps déjà). Vérifiez la date de la dernière mise à jour avant d’installer quoi que ce soit.

La limite de toute extension : c'est toujours vous qui chargez chaque page. Au-delà de quelques centaines d'images, vous avez des crampes à la main.

Niveau 2 : Extracteurs d'images et outils « headless »

Un cran au-dessus des extensions : des outils qui, à partir d'une URL, extraient toutes les images de la page affichée. La plupart se limitent à un site à la fois, mais se chargent pour vous de cliquer sur les liens.

Pour les tâches ponctuelles, la solution la plus simple consiste souvent simplement à wget à partir de la ligne de commande :

bash

wget -r -l 2 -A jpg,jpeg,png,webp,gif --no-parent https://example.com/gallery/

Cette commande télécharge de manière récursive les images situées jusqu'à deux niveaux de profondeur à partir d'une URL, en filtrant les fichiers de type image. Elle est présente dans toutes les distributions Linux depuis 25 ans et fonctionne toujours pour les sites statiques. Sous Windows, l'équivalent est curl ou celles de PowerShell Invoke-WebRequest.

Pour les sites sur lesquels vous préférez éviter d'utiliser des scripts, voici les outils « no-code » qui ont fait leurs preuves : Octoparse (toujours aussi fiable, modèle freemium), Apify (plutôt destiné aux développeurs, avec une boutique proposant des scrapers prêts à l’emploi, y compris des outils spécifiques aux images), Bardeen (plus récent, basé sur une extension de navigateur, s’intègre à d’autres outils de workflow). ParseHub n’est plus le choix évident qu’il était il y a trois ans — son offre gratuite a été considérablement restreinte.

Ces outils prennent en charge la pagination, le rendu JavaScript de base et l'exportation au format CSV. Ils commencent toutefois à montrer leurs limites sur les sites hautement sécurisés ou sur tout site proposant un défilement infini accessible uniquement après connexion.

Niveau 3 : Python — le langage par défaut des développeurs en activité

Pour un volume important, écrivez-le vous-même. La pile Python qui fonctionnera de manière fiable en 2026 est concise :

  • requests — récupère des pages et télécharge des fichiers image
  • BeautifulSoup — analyse le code HTML et identifie <img> balises et srcset attributs
  • Playwright — utilise un véritable navigateur sans interface graphique lorsque le site a besoin de JavaScript pour afficher les images
  • Pillow — traite les images téléchargées (redimensionnement, déduplication, validation du format)

Déroulement de base pour une page statique :

python

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import os

url = "https://example.com/gallery"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"}

resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, "html.parser")

os.makedirs("images", exist_ok=True)

for img in soup.find_all("img"):
    src = img.get("src") or img.get("data-src")
    if not src:
        continue
    full_url = urljoin(url, src)
    filename = os.path.join("images", os.path.basename(full_url.split("?")[0]))
    with open(filename, "wb") as f:
        f.write(requests.get(full_url, headers=headers).content)

Voilà pour la version en 30 secondes. Dans la pratique, vous devrez tenir compte de plusieurs réalités :

  • Chargement différé des images habiter à data-src, data-original, ou des attributs similaires plutôt que src — Vérifiez la page avant de vous fier au code.
  • srcset attributs proposer plusieurs résolutions pour les images adaptatives. La version de la plus haute qualité n’est souvent pas celle qui src indique ; analyser srcset pour s'emparer du plus gros.
  • Galeries générées par JavaScript n'apparaîtra pas dans requests aucune sortie. Passez à Playwright, attendez que la galerie s'affiche, puis extrayez les éléments du DOM.
  • Les URL CDN signées ont une durée de validité limitée : si vous collectez toutes les URL en une seule fois et que vous les téléchargez plus tard, attendez-vous à des erreurs 403. Téléchargez-les au fur et à mesure que vous les découvrez.
  • Protection contre les liens directs rejette les demandes qui ne sont pas justifiées Referer en-tête. Transmettez l'URL de la page source en tant que Referer et la plupart d'entre eux disparaissent.

Pour le scraping généré par Playwright :

python

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com/gallery")
    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    page.wait_for_timeout(2000)
    
    image_urls = page.eval_on_selector_all(
        "img", 
        "elements => elements.map(el => el.src)"
    )
    browser.close()

Cela permet de gérer le mécanisme de « défilement pour charger davantage de contenu », qui met en difficulté les robots d'indexation naïfs sur la plupart des galeries d'images modernes.

Niveau 4 : Collecte à l'échelle industrielle

Dès que l’on dépasse quelques milliers d’images par cycle, ou que l’on exécute des tâches de collecte en continu (cas les plus courants : constitution d’un ensemble de données d’images pour l’entraînement en apprentissage automatique, suivi des ressources visuelles des concurrents ou gestion de flux de contenu à grande échelle), les goulots d’étranglement changent de nature.

Le script n'est plus le problème. Les problèmes sont les suivants :

Limitation de débit et blocage d’adresses IP. Tout site digne de ce nom bloquera une adresse IP qui l’accède plus de quelques fois par minute. La solution consiste à utiliser des proxys résidentiels en rotation — des adresses IP attribuées à de véritables foyers, qui ne se distinguent en rien du trafic normal des utilisateurs. Les proxys de centres de données ne fonctionnent pas dans ce cas ; les principaux hébergeurs d’images et les plateformes de commerce électronique signalent par défaut les plages d’adresses IP des centres de données.

Contenu soumis à une géolocalisation. Certaines images ne sont diffusées que dans des régions spécifiques (images sportives sous licence, photos de produits régionaux). Le ciblage par proxy au niveau national permet de gérer cela ; pour un contenu véritablement localisé, le ciblage au niveau de la ville est essentiel.

Stockage et déduplication. Un traitement consistant à récupérer 100 000 images de 200 Ko chacune représente 20 Go. Calculer le hachage de chaque image au fur et à mesure du téléchargement (une simple hashlib.md5(content).hexdigest()) vous permet d'ignorer les doublons sans avoir à gérer une base de données parallèle des noms de fichiers.

Logique de réessai. Les réseaux peuvent tomber en panne, les CDN peuvent limiter le débit, les navigateurs peuvent planter. Intégrez une logique de réessai avec délai d'attente à chaque téléchargement, et consignez les échecs dans un journal plutôt que de bloquer le processus.

Concurrence. Utilisation aiohttp avec asyncio pour les charges de travail impliquant de nombreux téléchargements. Un script séquentiel simple téléchargeant 10 000 images à raison de 200 ms par requête prend 33 minutes ; la version asynchrone prend moins d’une minute (à condition que la source puisse le supporter — évitez de saturer le serveur de quelqu’un d’autre).

Pour les projets de ce niveau, l'infrastructure de proxy est plus importante que le script de scraping. Le script ne fait que 100 lignes, que vous écrirez en un après-midi. Ce sont les adresses IP résidentielles fiables et à rotation qui déterminent réellement si la tâche ira jusqu'au bout ou si elle s'interrompra à 30 % en raison du blocage de l'adresse IP.

IPBurger répond parfaitement à ces critères — rotation des proxys résidentiels, ciblage par pays, sessions persistantes quand vous en avez besoin — et le principe général reste valable quel que soit le fournisseur : à ce niveau, c'est la couche proxy qui supporte l'essentiel de la charge.

Ce que la plupart des guides omettent : les aspects juridiques et éthiques

Le « scraping d'images » constitue l'un des aspects les plus flous sur le plan juridique du web scraping, et ce pour plusieurs raisons spécifiques qui se sont renforcées au cours des deux dernières années :

Le droit d'auteur s'applique par défaut aux images. Contrairement aux extraits de texte, pour lesquels la notion d'« usage loyal » offre une plus grande marge de manœuvre, la reproduction d'images relève généralement du droit d'auteur. Le fait qu'une image soit accessible au public sur Internet ne confère pas pour autant le droit de la copier et de la redistribuer. Pour une utilisation commerciale, cela représente un risque réel ; pour les ensembles de données destinés à l'apprentissage automatique, il s'agit d'un domaine juridique en pleine évolution et non encore clairement défini.

Les conditions générales d'utilisation interdisent souvent explicitement le scraping. Enfreindre ces conditions ne constitue généralement pas un délit pénal, mais peut donner lieu à des poursuites civiles et entraîner le blocage de vos comptes et adresses IP. Lisez attentivement les conditions générales d'utilisation de tout site sur lequel vous effectuez du scraping à grande échelle.

La loi européenne sur l'IA et les réglementations similaires commencent à exiger la divulgation des sources des données d'entraînement utilisées pour les modèles d'IA. Si vous effectuez du scraping à des fins d'apprentissage automatique, précisez d'où proviennent les données et comment elles ont été collectées.

Certains contenus sont interdits, quelle que soit leur accessibilité technique. Les images représentant des personnes identifiables, en particulier des mineurs, sont strictement interdites, même si la page est publique. Les réglementations en matière de protection de la vie privée (RGPD, CCPA) s’appliquent.

Une règle empirique pratique : si vous auriez honte d’expliquer votre opération de scraping à un juge ou à l’avocat du site, ne le faites pas. Si vous pouvez l’expliquer clairement — « nous collectons des images de produits accessibles au public à des fins de comparaison de prix, en respectant le fichier robots.txt, en limitant le débit de nos requêtes et en citant nos sources » — vous n’avez probablement rien à craindre.

Un processus par défaut raisonnable

Si vous vous lancez aujourd’hui dans un projet d’extraction d’images et que vous ne savez pas quelle formule choisir, voici la solution qui s’adapte à vos besoins :

  1. Inspectez la page à l'aide des outils de développement du navigateur. Identifiez l'emplacement réel des URL des images. Statique src? srcset? data-src? Les images d'arrière-plan en CSS ? Cette recherche de 10 minutes vous fera gagner des heures par la suite.
  2. Essayez wget ou un petit requests + BeautifulSoup Commencez par le script. Si les images s'affichent correctement, c'est terminé.
  3. Si le rendu JavaScript pose problème, passez à Playwright. Les navigateurs « headless » sont plus lents, mais gèrent tout ce qu'un utilisateur réel peut voir.
  4. Si vous commencez à obtenir des codes d'erreur 403 ou 429, ajoutez une couche de proxys résidentiels. N'essayez pas de déjouer le système anti-bot en modifiant sans cesse les en-têtes ; dès qu'un site a identifié votre adresse IP, c'est définitif.
  5. Ajoutez la déduplication, la logique de réessai et la concurrence dès que le volume justifie cette complexité. Ne mettez pas en place le pipeline de production dès le premier jour.

La plupart des projets d'extraction d'images échouent au milieu de l'étape 4 — non pas parce que la programmation est difficile, mais parce que l'opérateur tente d'utiliser des adresses IP de centres de données alors qu'il faudrait des adresses résidentielles, y passe trois jours et finit par abandonner. Choisissez la bonne infrastructure dès le départ et le reste sera simple.

La solidité de votre entreprise dépend de la disponibilité de vos proxys. Optez pour des proxys ISP statiques de niveau professionnel afin de bénéficier de débits dédiés et d'une fiabilité à toute épreuve. OU déployez des proxys résidentiels rotatifs et atteignez un taux de réussite de 99,9 % en matière de scraping.

Dans cet article :
Ne vous inquiétez plus de la qualité de votre proxy

Nos proxys ISP statiques sont garantis « propres » et vous sont entièrement dédiés (100 %). Pas de charge partagée, juste de la performance.

Obtenir des proxys ISP statiques

Plonger encore plus profondément dans le

Prêt à essayer des proxys qui font le travail ?

Configuration en moins de 60 secondes. Plus de 24 100 entreprises dans le monde lui font confiance.

Setup in <60 seconds
Vous pouvez résilier à tout moment
Assistance en direct 24 h/24, 7 j/7