Comment scraper les prix Google Shopping en 2026 : guide pratique avec proxies

Le Content API for Shopping ne sert que vos propres produits. Pour surveiller vos concurrents, il faut parser le SERP tbm=shop. Voici comment le faire avec des proxies résidentiels et éviter les blocages anti-bot.

How to Scrape Google Shopping Prices in 2026: A Practical Guide

Comment scraper les prix Google Shopping en 2026 : le compromis API contre HTML

Avant d'écrire la moindre ligne de code, il faut trancher une question qui détermine toute l'architecture de votre Google Shopping price scraper : utiliser l'API officielle ou parser le HTML public ? La réponse dépend d'un fait que Google ne met pas en avant : le Content API for Shopping ne renvoie que les produits du marchand authentifié. Vous ne pouvez pas l'interroger pour connaître le prix appliqué par un concurrent sur le même ASIN ou GTIN.

Pour de l'intelligence concurrentielle — surveiller les prix des concurrents, comparer les vendeurs sur une même fiche, suivre l'évolution des promotions — il faut donc parser le SERP tbm=shop et les pages /shopping/product/. C'est exactement ce que font les outils commerciaux de price monitoring. La difficulté n'est pas technique, elle est opérationnelle : Google protège agressivement ces pages et le moindre pattern suspect déclenche un CAPTCHA.

Ce guide vous montre comment scraper les données produits Google Shopping de manière fiable en 2026 : sélecteurs CSS concrets, gestion de l'anti-bot, géo-ciblage localisé et code Python prêt à l'emploi via la passerelle ProxyHat.

Pourquoi le problème existe : la pile anti-bot de Google

Google Shopping n'est pas une page HTML statique servie sans conditions. C'est un SERP protégé par plusieurs couches :

  • reCAPTCHA Enterprise — déclenché sur patterns suspects, parfois en mode invisible avant même d'afficher un challenge.
  • Redirect /sorry/index — Google renvoie une page d'excuses avec CAPTCHA quand une IP dépasse un seuil de requêtes ou présente un comportement automatisé. C'est le soft-block le plus courant.
  • Limites de débit par IP — empiriquement, au-delà de quelques dizaines de requêtes par minute sur une même IP résidentielle, le taux de blocage grimpe. Les IPs datacenter sont souvent bloquées dès la première requête.
  • Fingerprinting TLS et en-têtes — JA3/JA4, ordre des en-têtes, présence de sec-ch-ua cohérents. Un client HTTP mal configuré se fait repérer même avec une bonne IP.

La RFC 7231 rappelle qu'un 429 Too Many Requests est le signal canonique de rate-limit. Google préfère souvent renvoyer un 200 avec une page /sorry/ plutôt qu'un 429 explicite — il faut donc détecter la redirection, pas seulement le code HTTP.

Leçon pratique : un scraper Google Shopping fiable ne se mesure pas au taux de succès sur 50 requêtes, mais au taux de succès soutenu sur 5 000 requêtes réparties sur 24 heures. Un run qui passe en local sans proxy ne prouve rien.

URL patterns et sélecteurs CSS pour Google Shopping

La base de l'URL de recherche Shopping est simple :

https://www.google.com/search?tbm=shop&q=YOUR_QUERY&gl=us&hl=en

Le paramètre tbm=shop bascule vers l'onglet Shopping. gl force le pays (code ISO 3166-1 alpha-2), hl force la langue. Sans ces paramètres, Google infère depuis l'IP et les cookies — imprévisible pour un scraper.

Les conteneurs de résultats utiles dans le HTML du SERP Shopping :

  • .sh-dgr__content — conteneur principal d'un résultat produit dans la grille.
  • .sh-pr__product-results — bloc de résultats produits sur les pages enrichies.
  • .a8Pemb — nœud de prix (texte type $129.99 ou 1 299,00 €). La classe est générée dynamiquement, vérifiez-la sur une capture récente avant de mettre en production.
  • .sh-dgr__group — groupe de vendeurs pour un même produit.

Pour les fiches produit détaillées :

https://www.google.com/shopping/product/PRODUCT_ID/offer

Les panels d'offres vendeurs (.sh-o__offer ou équivalent selon le rendering) listent chaque marchand avec son prix, sa note et ses frais de port. C'est ici que l'on extrait le prix concurrentiel réel, frais de port inclus ou exclus selon votre modèle.

Un sélecteur XPath robuste pour le prix :

//div[contains(@class,'sh-dgr__content')]//div[contains(@class,'a8Pemb')]/text()

Attention : Google change régulièrement ces classes générées. Verrouillez une capture HTML de référence, testez vos sélecteurs dessus, et prévoyez un fallback par expression régulière sur le motif de prix \$?\d[\d.,]*\s?(?:USD|EUR|GBP|\$|€|£) pour ne pas tout perdre à chaque mise à jour visuelle.

Pourquoi les prix localisés exigent des proxies résidentiels avec géo ville

C'est le point le plus sous-estimé par les équipes qui débutent sur Google Shopping : le même produit n'a pas le même prix, ni les mêmes vendeurs, selon la géo du demandeur. Un shopper US voit des vendeurs américains en USD ; un shopper allemand voit des vendeurs EU en EUR, parfois avec des prix différents de 10 à 30 % sur l'électronique ou les cosmétiques.

Les paramètres gl et hl ne suffisent pas. Google les croise avec l'IP de connexion pour détecter les incohérences. Un gl=de depuis une IP US renvoie souvent des résultats dégradés ou localisés US. Pour obtenir des prix fidèles au marché allemand, il faut une IP résidentielle allemande — idéalement au niveau ville pour les marchés où la logistique influence les vendeurs visibles.

C'est là que le géo-ciblage ProxyHat intervient. Le pays et la ville se passent dans le username :

# Résidentiel US (pays)
http://user-country-US:pass@gate.proxyhat.com:8080

# Résidentiel Allemagne, Berlin (pays + ville)
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080

# Sticky session pour garder la même IP sur un lot de requêtes liées
http://user-country-DE-city-berlin-session-batch01:pass@gate.proxyhat.com:8080

La sticky session est essentielle pour Google Shopping : si vous changez d'IP entre la recherche tbm=shop et la fiche /shopping/product/, Google peut vous renvoyer des résultats incohérents ou déclencher un challenge. Groupez vos requêtes par session.

Consultez la liste des localisations ProxyHat pour vérifier la couverture pays/ville disponible avant de planifier votre collecte.

Exemple Python : scraper un bloc de résultat Google Shopping

Voici un exemple fonctionnel avec requests et BeautifulSoup, routé via ProxyHat. Il récupère une page tbm=shop pour une requête, parse le premier bloc résultat (titre, prix, vendeur, note) et gère la détection de soft-block.

import requests
from bs4 import BeautifulSoup
import random
import time
from urllib.parse import urlencode

PROXY = "http://user-country-US-session-s1:YOUR_PASSWORD@gate.proxyhat.com:8080"
PROXIES = {"http": PROXY, "https": PROXY}

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                 "AppleWebKit/537.36 (KHTML, like Gecko) "
                 "Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def fetch_shopping(query, gl="us", hl="en"):
    params = {"tbm": "shop", "q": query, "gl": gl, "hl": hl}
    url = "https://www.google.com/search?" + urlencode(params)
    r = requests.get(url, headers=HEADERS, proxies=PROXIES, timeout=20)
    if "/sorry/" in r.url or " Our systems have detected" in r.text:
        raise RuntimeError("Soft-block détecté — basculez de session proxy")
    return r.text

def parse_first_result(html):
    soup = BeautifulSoup(html, "html.parser")
    card = soup.select_one(".sh-dgr__content")
    if not card:
        return None
    title = card.select_one("h3, .tD2V4e")
    price = card.select_one(".a8Pemb")
    seller = card.select_one(".sh-dgr__merchant, .b5U0Ze")
    rating = card.select_one("[aria-label*='rated']")
    return {
        "title": title.get_text(strip=True) if title else None,
        "price": price.get_text(strip=True) if price else None,
        "seller": seller.get_text(strip=True) if seller else None,
        "rating": rating.get("aria-label") if rating else None,
    }

if __name__ == "__main__":
    html = fetch_shopping("sony wh-1000xm5 headphones", gl="us", hl="en")
    result = parse_first_result(html)
    print(result)
    # Exemple tronqué de sortie :
    # {'title': 'Sony WH-1000XM5 Wireless Noise Canceling Headphones',
    #  'price': '$329.99',
    #  'seller': 'Best Buy',
    #  'rating': 'Rated 4.6 out of 5'}
    time.sleep(random.uniform(3, 8))

Quelques points clés de cet exemple :

  • Session sticky via -session-s1 dans le username — l'IP reste stable pour ce run.
  • Détection du soft-block par présence de /sorry/ dans l'URL finale, pas seulement par code HTTP.
  • Délai aléatoire de 3 à 8 secondes après la requête pour simuler un comportement humain.
  • Fallback de sélecteurs — on teste plusieurs classes pour ne pas tout casser si Google en renomme une.

Pour extraire toutes les offres vendeurs d'une fiche produit, remplacez l'URL par https://www.google.com/shopping/product/{product_id}/offer et itérez sur .sh-o__offer (ou la classe courante). Pour un exemple complet d'orchestration multi-requêtes, consultez notre cas d'usage web scraping.

Pagination, batching et détection des soft-blocks

Un scraper Google Shopping sérieux ne se contente pas d'une requête. Il faut paginer, batcher et anticiper les blocages.

Pagination

Google Shopping pagine via &start=0, &start=20, &start=40… Au-delà de la page 5-7, les résultats deviennent souvent moins pertinents et Google peut restreindre l'accès. Limitez-vous à 3-5 pages par requête pour rester dans la zone fiable.

Batching par session

Ne réutilisez pas une session indéfiniment. Pattern recommandé :

  1. Créez une session -session-batch01 pour une requête + ses 3 pages de pagination.
  2. Terminez le lot, attendez 30-90 secondes.
  3. Passez à -session-batch02 avec une nouvelle IP pour la requête suivante.

Cela limite l'exposition par IP tout en gardant la cohérence d'une recherche.

Détection des soft-blocks avant le CAPTCHA dur

Les signaux d'alerte avant un blocage définitif :

  • Redirection vers /sorry/index — soft-block immédiat.
  • Présence d'un formulaire reCAPTCHA dans le HTML.
  • Nombre de résultats qui chute brutalement (de 20 à 2-3) sans raison.
  • Temps de réponse qui passe de 800 ms à 5+ secondes — souvent un pré-blocage.
  • En-tête X-Robots-Tag: noindex anormal ou absence de sh-dgr__content sur une page qui devrait avoir des résultats.

Implémentez un circuit breaker : si 3 requêtes consécutives échouent sur une session, abandonnez-la, attendez 10-15 minutes, et reprenez avec une nouvelle session. Ne relancez pas en boucle — c'est le meilleur moyen de transformer un soft-block en IP bannie.

Seuils de débit réalistes

Avec des proxies résidentiels ProxyHat et un délai de 5 secondes en moyenne, vous tenez environ 12 requêtes par minute par session. Sur 100 sessions concurrentes, cela donne ~720 requêtes/minute — largement suffisant pour un monitoring quotidien de 1 000-5 000 produits. Visez un taux de succès de 95%+ sur 24 heures comme métrique de santé, pas le pic de vitesse.

Éthique, ToS et limites légales

Le scraping de données publiques de prix n'est pas intrinsèquement illégal, mais il s'inscrit dans une zone grise qu'il faut connaître.

  • Données publiques uniquement — les prix visibles sans connexion sont les seuls que vous devriez collecter. Les prix nécessitant un login, un panier ou une géo précise simulée tombent sous d'autres règles.
  • ToS de Google — les conditions d'utilisation de Google interdisent l'accès automatisé sans autorisation. En pratique, le débat juridique porte sur le Computer Fraud and Abuse Act aux US et sur le RGPD en UE pour les données personnelles. Les prix produits ne sont pas des données personnelles, mais les avis utilisateurs attachés le sont — évitez de collecter les avis identifiés.
  • robots.txthttps://www.google.com/robots.txt restreint l'accès à de nombreux chemins. Vérifiez-le et respectez les directives Disallow pour les chemins concernés.
  • Volume et impact — un scraper qui génère 1% du trafic d'un site n'est pas la même chose qu'un scraper qui en génère 50%. Gardez votre empreinte faible.

Pour les cas où la conformité est non-négociable (entreprise cotée, données clients sensibles), la route officielle existe : Google Shopping partners et les API SERP commerciales agrées. C'est plus cher mais déplace la responsabilité légale. Pour de l'intelligence concurrentielle interne à volume modéré, le scraping responsable avec proxies résidentiels reste l'option pragmatique.

Configuration ProxyHat et liens utiles

ProxyHat expose une passerelle unique pour HTTP et SOCKS5. Pour Google Shopping, HTTP suffit — SOCKS5 n'est utile que si vous devez tunneliser d'autres protocoles.

  • HTTP : http://USERNAME:PASSWORD@gate.proxyhat.com:8080
  • SOCKS5 : socks5://USERNAME:PASSWORD@gate.proxyhat.com:1080

Les flags de géo et de session vont dans le username, jamais dans l'URL ou les en-têtes. Exemples :

# US, pays
http://user-country-US:pass@gate.proxyhat.com:8080

# Allemagne, Berlin, sticky session
http://user-country-DE-city-berlin-session-q1:pass@gate.proxyhat.com:8080

Ressources internes à consulter :

Points clés à retenir

  • Le Content API for Shopping ne sert que vos propres produits — l'intelligence concurrentielle passe par le HTML tbm=shop.
  • Google Shopping applique reCAPTCHA Enterprise, redirect /sorry/ et limites de débit par IP agressives — la détection des soft-blocks est plus importante que la vitesse.
  • Les prix sont localisés : gl + hl + IP résidentielle du bon pays/ville. Un proxy US ne donnera jamais des prix allemands fiables.
  • Utilisez des sessions sticky par lot de requêtes liées, et changez de session toutes les 3-5 pages ou en cas de soft-block.
  • Visez 95%+ de taux de succès sur 24 heures, pas le pic de requêtes/sec. La fiabilité soutenable bat toujours la vitesse.
  • Respectez robots.txt, collectez uniquement les prix publics, et envisagez les partenaires officiels Google si la conformité est critique.

FAQ

Qu'est-ce que scraper les prix Google Shopping en 2026 ?

Scraping les prix Google Shopping consiste à récupérer automatiquement les prix, vendeurs et notes affichés sur les pages de résultats Google Shopping (tbm=shop) et les fiches produit /shopping/product/. En 2026, le Content API for Shopping ne renvoie que les produits du marchand lui-même, donc l'intelligence concurrentielle passe par l'analyse du HTML public du SERP via des proxies résidentiels.

Pourquoi le scraping Google Shopping est-il important pour les utilisateurs de proxies ?

Les prix Google Shopping varient selon le pays, la ville et parfois l'appareil. Un acheteur US et un acheteur allemand voient des vendeurs et devises différents. Les proxies résidentiels avec géo ciblée au niveau ville permettent de capturer ces variations locales de manière fiable, sans déclencher les limites de débit par IP de Google.

Quel type de proxy fonctionne le mieux pour scraper Google Shopping ?

Les proxies résidentiels sont les plus adaptés car ils utilisent des IPs d'opérateurs réels, ce qui réduit le risque de détection anti-bot. Le géo-ciblage pays et ville est essentiel pour obtenir des prix localisés. Les proxies datacenter sont rapidement bloqués par Google. Les proxies mobiles offrent une discrétion maximale mais à un coût plus élevé.

Comment éviter les blocages quand on scrape Google Shopping ?

Utilisez une rotation d'IP par requête, des délais aléatoires de 3 à 8 secondes, des en-têtes navigateur réalistes et des sessions persistantes par lot de requêtes liées. Détectez les soft-blocks via la redirection vers /sorry/ ou l'absence de résultats et basculez immédiatement de session proxy. Respectez robots.txt et limitez le volume par IP à quelques requêtes par minute.

Prêt à commencer ?

Accédez à plus de 50M d'IPs résidentielles dans plus de 148 pays avec filtrage IA.

Voir les tarifsProxies résidentiels
← Retour au Blog