Comment Extraire Google Images en JSON avec des URLs en Pleine Résolution
Google Images ressemble à une simple grille de photos, mais c’est l’une des pages les plus difficiles à extraire du web. Ce que vous voyez n’est pas ce qui se trouve dans le HTML. Les miniatures sont chargées en différé, les originaux en pleine résolution sont cachés derrière un clic et une seconde requête, et les URLs présentes dans le balisage sont souvent des blobs base64 ou des redirections éphémères plutôt que l’image réelle sur le site de l’éditeur. Écrivez un scraper naïf et vous vous retrouvez avec un dossier d’aperçus de 200 pixels sans savoir d’où provient aucun d’eux.
Le nouveau plugin Google Images supprime tout ce problème. Vous envoyez un mot-clé et vous recevez un tableau JSON où chaque résultat porte déjà l’URL de l’image originale en pleine résolution, la page où elle apparaît et le domaine source. Cet article explique pourquoi Google Images est délicat, ce que renvoie le plugin et comment construire un vrai jeu de données d’images avec lui.
Pourquoi Google Images Est Difficile à Extraire
Avant le plugin, toutes les approches habituelles avaient un piège :
- Les miniatures visibles sont réduites. Le
srcque vous pouvez lire directement dans la grille pointe vers une miniature hébergée par Google, généralement de quelques centaines de pixels de large. Parfait pour un aperçu, inutile si vous avez besoin de la ressource réelle. - Les URLs originales sont différées. L’image en pleine résolution vit sur le serveur de l’éditeur, et Google ne révèle cette URL qu’après une interaction. Elle est nichée dans une charge utile JavaScript, pas dans le HTML initial, donc une simple requête HTTP ne la voit jamais.
- Le balisage est bruyant à dessein. Les noms de classe sont obfusqués et changent souvent, les données en ligne sont encodées, et une grande partie de la page est construite côté client. Les sélecteurs qui fonctionnent aujourd’hui casseront la semaine prochaine.
- C’est une surface Google sensible aux bots. Martelez la page de résultats depuis une seule IP sans empreinte de navigateur et vous obtenez un défi ou une page vide au lieu de résultats.
Vous pouvez résoudre tout cela vous-même avec un navigateur headless, des attentes soignées et l’analyse de la charge utile, mais c’est beaucoup de code fragile à maintenir pour ce qui devrait être une simple requête.
Ce Que Renvoie le Plugin Google Images
Le plugin prend une phrase de recherche - la même que vous taperiez dans Google Images - et renvoie les résultats d’images sous forme de tableau JSON structuré. Le détail clé est que imageUrl est l’image réelle, en pleine résolution, sur le site source, et non une miniature Google.
Pour chaque résultat, vous obtenez des champs comme :
position- rang dans les résultatstitle- le texte alt/titre de l’imageimageUrl- l’URL de l’image originale en pleine résolution sur le site de l’éditeursourceUrl- la page où l’image apparaîtsourceDomain- l’hôte de cette page, commeexample.comsiteName- le nom lisible du site lorsqu’il est disponiblethumbnailUrl- l’aperçu hébergé par Google, si vous voulez une version légèrewidthetheight- les dimensions de l’image originale en pixels
Comme l’URL originale et la page source arrivent ensemble, vous savez toujours ce qu’est l’image et où elle réside légitimement, ce qui compte beaucoup pour la licence et l’attribution.
La Requête
L’endpoint est un seul appel POST. Le seul paramètre obligatoire est q, la phrase de recherche. Quelques paramètres optionnels contrôlent l’emplacement, la langue et le nombre de résultats :
q(obligatoire) - la phrase de recherche, par exemplepanda rouxproxy_country- le pays de l’IP de sortie sous forme de code ISO-2 (US,GB,DE)gl- le pays de recherche Google, ISO-2 en minuscules (us,de,fr)max_results- combien d’images renvoyer, de 1 à 100
Voici l’appel le plus simple possible avec curl :
curl -X POST "https://api.scrapeunblocker.com/images/google-search?q=panda%20roux&max_results=20" \
-H "x-scrapeunblocker-key: YOUR_API_KEY"
Cela renvoie les premiers résultats d’images pour le mot-clé, chacun avec son URL en pleine résolution, en une seule réponse. Vous ne gérez pas de navigateur, n’attendez pas le chargement différé et n’analysez aucun HTML.
La Réponse
La réponse est un unique objet JSON. Le niveau supérieur répète la requête et le nombre de résultats renvoyés, et le tableau results contient les images :
{
"q": "panda roux",
"proxyCountry": "US",
"resultsCollected": 20,
"results": [
{
"position": 1,
"title": "Panda roux au repos sur une branche",
"imageUrl": "https://example.com/photos/red-panda-full.jpg",
"sourceUrl": "https://example.com/wildlife/red-panda",
"sourceDomain": "example.com",
"siteName": "Example Wildlife",
"thumbnailUrl": "https://encrypted-tbn0.gstatic.com/images?q=...",
"width": 2400,
"height": 1600
}
]
}
Comme la forme est stable, vous pouvez la mapper directement vers une base de données, un tableur ou une file de téléchargement sans nettoyage de HTML.
L’Appeler Depuis Python
Vous n’avez pas besoin du SDK pour utiliser le plugin : n’importe quel client HTTP fonctionne. Voici un petit exemple avec requests qui exécute une recherche et affiche chaque résultat :
import requests
API_KEY = "YOUR_API_KEY"
URL = "https://api.scrapeunblocker.com/images/google-search"
params = {
"q": "panda roux",
"proxy_country": "US",
"gl": "us",
"max_results": 20,
}
resp = requests.post(URL, params=params, headers={"x-scrapeunblocker-key": API_KEY})
resp.raise_for_status()
data = resp.json()
for img in data["results"]:
print(f"{img['position']:>2}. {img['width']}x{img['height']} "
f"{img['sourceDomain']:<20} {img['imageUrl']}")
Si vous préférez l’outillage officiel, ScrapeUnblocker propose des SDK pour Python, Node.js, Ruby et PHP, et le plugin est aussi disponible via le tableau de bord et la référence de l’API. Le paquet Python s’installe avec pip install scrapeunblocker et lit votre clé depuis une variable d’environnement, ce qui vous évite de passer l’en-tête à la main.
Télécharger les Images Réelles
Tout l’intérêt d’obtenir l’URL en pleine résolution est de pouvoir récupérer le fichier réel. Voici une boucle recherche-puis-téléchargement qui enregistre chaque image originale sur le disque, nommée par domaine source :
import os
import requests
from urllib.parse import urlparse
API_KEY = "YOUR_API_KEY"
SEARCH_URL = "https://api.scrapeunblocker.com/images/google-search"
os.makedirs("images", exist_ok=True)
params = {"q": "machine a ecrire ancienne", "max_results": 30}
data = requests.post(SEARCH_URL, params=params,
headers={"x-scrapeunblocker-key": API_KEY}).json()
for img in data["results"]:
url = img["imageUrl"]
ext = os.path.splitext(urlparse(url).path)[1] or ".jpg"
name = f"images/{img['position']:02d}_{img['sourceDomain']}{ext}"
try:
r = requests.get(url, timeout=20)
r.raise_for_status()
with open(name, "wb") as f:
f.write(r.content)
print("enregistre", name)
except requests.RequestException as e:
print("ignore", url, e)
Comme imageUrl pointe vers le serveur d’origine et non vers une miniature Google, certains hôtes peuvent limiter le débit ou protéger contre le hotlinking. Enveloppez le téléchargement dans un try/except, ajoutez une courte pause entre les requêtes et ignorez celles qui échouent plutôt que de laisser un mauvais hôte arrêter toute l’exécution.
Ce Que Vous Pouvez Construire Avec
Les résultats de recherche d’images en JSON propre ouvrent plusieurs cas d’usage pratiques :
- Jeux de données d’entraînement et de référence. Rassemblez des images étiquetées pour une catégorie, en conservant
title,sourceUrletsourceDomainavec chaque fichier pour pouvoir tracer la provenance et filtrer par licence plus tard. - Surveillance de marque et de logos. Recherchez votre marque ou votre produit et voyez quels sites utilisent vos images, et à quelle résolution.
- Recherche de contenu et SEO. Vérifiez quelles images se classent pour un mot-clé, leur taille, et quels domaines dominent les résultats d’un sujet.
- Enrichissement de produits et catalogues. Récupérez des images candidates pour des produits par nom et choisissez le résultat de plus haute résolution pour chacun.
Comme chaque résultat inclut width et height, vous pouvez filtrer les images au-dessus d’une taille minimale en une ligne avant de télécharger quoi que ce soit.
Conseils Pratiques
Quelques points à garder à l’esprit :
- Soyez précis avec les mots-clés. Les termes larges renvoient des images de banque génériques ; une phrase précise renvoie un ensemble plus resserré et pertinent. Traitez
qexactement comme une vraie recherche Google Images. - Fixez l’emplacement quand cela compte. Les résultats d’images peuvent varier selon la région. Utilisez
proxy_countryetglensemble lorsque vous avez besoin de résultats reproductibles et précis par région. - Filtrez tôt par dimensions. Utilisez
widthetheightpour écarter les images minuscules avant de dépenser de la bande passante à les télécharger. - Respectez les licences. Une URL d’image publique n’est pas une licence d’utilisation. Conservez
sourceUrletsiteNameavec chaque image et vérifiez les droits d’usage avant de publier ou redistribuer quoi que ce soit. - Gérez les échecs de téléchargement proprement. Les originaux vivent sur des serveurs tiers, attendez-vous donc à quelques 403 et délais dépassés, et passez-les.
FAQ
Est-ce que j’obtiens l’image réelle ou juste une miniature ?
Vous obtenez la vraie. imageUrl est l’original en pleine résolution hébergé sur le site source. Un thumbnailUrl est également inclus si vous voulez un aperçu léger.
Combien d’images un appel peut-il renvoyer ?
Jusqu’à 100, contrôlé par max_results. Réglez-le sur le nombre dont vous avez réellement besoin pour garder les réponses petites et rapides.
Puis-je cibler un pays ou une langue spécifique ?
Oui. Utilisez proxy_country pour l’IP de sortie et gl pour le pays de recherche Google. Réglez les deux lorsque la région d’origine des résultats vous importe.
Est-il légal d’extraire Google Images ? Lire des résultats de recherche publics est généralement acceptable, mais les images elles-mêmes sont des œuvres protégées appartenant à leurs éditeurs. Obtenir une URL n’est pas une licence. Vérifiez et respectez toujours les droits d’usage de chaque image avant de la réutiliser.
Et si j’ai besoin d’images d’un site précis ?
Ajoutez un terme de type site: à votre requête, ou extrayez directement les pages de ce site avec l’endpoint de scraping standard et récupérez les images voulues dans le balisage.
Pour Conclure
Google Images transforme une grille d’apparence simple en casse-tête de scraping : miniatures réduites, URLs originales différées, balisage obfusqué et surface sensible aux bots. Le plugin Google Images ramène tout cela à un seul appel qui renvoie des URLs d’images en pleine résolution, des pages sources et des dimensions en JSON propre, pour que vous passiez votre temps à construire le jeu de données plutôt qu’à faire de la rétro-ingénierie sur la page.
Si vous voulez l’essayer, le plugin est disponible dans le tableau de bord ScrapeUnblocker et documenté aux côtés des autres plugins dans la documentation développeur. Pointez-le sur un mot-clé et voyez à quoi ressemble la recherche d’images sous forme de données structurées.
Essayez ScrapeUnblocker gratuitement
Taux de réussite de plus de 95 % · à partir de 0,55 € pour 1 000 appels · 500 requêtes gratuites à l'inscription.