Comment j’extrais Yelp avec Python sans me faire bloquer

Dernière mise à jour le April 15, 2026

Yelp regroupe répartis sur — et transformer ces données en un format exploitable n’a jamais été aussi corsé. La répression anti-bots menée par Yelp en 2024–2025 a discrètement cassé la plupart des tutoriels Python existants pour le scraping.

Si vous avez récemment tenté d’utiliser un scraper Yelp et que vous vous êtes heurté à une avalanche d’erreurs 403, à des réponses HTML vides ou à des CAPTCHA apparus récemment, vous n’imaginez rien. Yelp s’appuie désormais sur le fingerprint TLS/JA3, des noms de classes CSS obfusqués et tournants, ainsi que sur un scoring agressif de réputation IP — ce qui signifie que l’ancienne méthode requests + BeautifulSoup, encore recommandée partout, plante dès la première requête. J’ai passé des semaines à tester différentes approches face à la pile actuelle de Yelp, et ce guide couvre tout ce qui fonctionne réellement en 2025 : l’API officielle Fusion (et pourquoi elle ne suffira probablement pas), un workflow Python complet avec une stratégie anti-blocage en couches, ainsi qu’une alternative no-code en 2 clics avec pour ceux qui veulent simplement les données, sans se taper le marathon de débogage.

Pourquoi extraire Yelp avec Python ? Et qui y gagne vraiment ?

Avant d’écrire une seule ligne de code, quelle est la vraie valeur métier des données Yelp ? La plateforme n’est pas juste un site d’avis pour restos : c’est en pratique une base vivante d’entreprises locales avec coordonnées structurées, notes, catégories, horaires et des centaines de millions d’avis clients.

yelp_stats_bd6a43108e.png

Voici les profils qui en tirent le plus de valeur et ce qu’ils en extraient :

Cas d’usageChamps de données clésPourquoi c’est important
Ventes et génération de leadsNom de l’entreprise, téléphone, site web, adresse, catégorie, noteConstruire des listes de prospects ciblées pour des PME locales — 4 utilisateurs Yelp sur 5 sont prêts à acheter dès leur arrivée
Veille concurrentielleAvis, notes, volume d’avis, sentimentSurveiller la réputation des concurrents, repérer les lacunes de service, suivre les tendances
Études de marché et NLPTexte intégral des avis, dates, métadonnées des auteursAnalyse de sentiment, modélisation de sujets — les avis Yelp comptent parmi les corpus NLP les plus utilisés dans la recherche académique
Immobilier et choix d’emplacementDensité d’entreprises, mix de catégories, qualité des avis par zoneSélection de sites pour franchises et enseignes — Yelp vend d’ailleurs Location Intelligence comme produit B2B sous licence pour précisément cet usage
E-commerce et opérationsSignaux de prix, plaintes clients, horaires de serviceSuivre la manière dont les concurrents sont évalués et identifier des schémas opérationnels

Le fil conducteur est simple : l’objectif réel, c’est la donnée structurée, et Python n’est qu’un moyen d’y parvenir. Certains lecteurs voudront un contrôle programmatique total. D’autres auront juste besoin d’un tableur avec les coordonnées de plombiers à Austin. Ce guide couvre les deux approches.

API Yelp Fusion ou scraping Python : que faut-il choisir ?

La plupart des guides zappent complètement cette question et passent directement au code, sans vérifier si l’ officielle — désormais rebaptisée « Yelp Places API » — n’aurait pas suffi. D’après mon expérience, ce simple arbitrage fait gagner des heures perdues, car l’API est excellente pour certaines tâches et franchement insuffisante pour d’autres.

Ce que l’API Fusion fournit réellement

L’API Fusion propose la recherche d’entreprises structurée, les détails d’une entreprise, l’autocomplétion et un endpoint d’avis. Elle est autorisée, bien documentée et ne nécessite pas de bidouille anti-bot.

Mais tout se complique avec l’endpoint d’avis. Voici ce que des employés de Yelp ont confirmé sur GitHub :

« L’API Yelp ne renvoie pas le texte intégral des avis. Trois extraits de 160 caractères sont fournis par défaut. » —

Ce n’est pas un bug, c’est voulu. L’API est limitée à 3 extraits d’avis (7 avec Premium), chacun tronqué à environ 160 caractères. Pas de métadonnées d’avis (votes utile/drôle/sympa), pas d’historique de l’auteur, pas de réponses du propriétaire. Et la après mai 2023 — contre 5 000 auparavant. Les tarifs commencent à .

Cadre de décision

CritèreAPI Yelp FusionScraping PythonThunderbit (no-code)
Avis complets❌ Seulement 3 extraits (~160 caractères chacun)✅ Tous les avis via GraphQL✅ Tous les avis visibles
Limites de requêtes300–500/jour (nouveaux) ; 5 000 (anciens)À votre charge (budget proxy)Basé sur des crédits
Effort de mise en place~15 min (clé API + SDK)De quelques heures à plusieurs jours~2 minutes
Champs métiers~20 champs structurésIllimités (analyse HTML/JSON)Champs suggérés par IA
Gestion anti-botN/A (autorisé)À construire soi-mêmeGérée automatiquement
Risque légal✅ Autorisé⚠️ Zone grise des CGU⚠️ Même risque que le scraping
Coût29 $/mois minimumGratuit (+ coûts proxy 0,75–4 $/Go)Offre gratuite disponible
MaintenanceFaible (API stable)Élevée (sélecteurs cassés, anti-bot plus strict)Faible (l’IA se réadapte)

Choisissez l’API Fusion si : vous avez besoin d’informations basiques sur les entreprises, de recherches à petite échelle ou d’une intégration autorisée — et que 3 extraits d’avis par entreprise suffisent.

Choisissez le scraping Python si : vous avez besoin du texte intégral des avis, de tous les avis d’une entreprise, des métadonnées d’avis, de plus de 240 résultats par recherche, ou si votre budget est inférieur à 29 $/mois.

Choisissez Thunderbit si : vous voulez les données vite, sans écrire ni maintenir de code. On détaille ça dans la section no-code ci-dessous.

L’astuce no-code : extraire Yelp avec Thunderbit (sans Python)

Avant de rentrer dans le détail côté Python, voici l’option la plus rapide pour ceux dont le vrai but est la donnée, pas l’exercice de code. Tous les guides concurrents partent du principe que tu maîtrises Python, mais dans mon travail chez Thunderbit, j’ai constaté qu’une grande partie des personnes qui cherchent « scrape Yelp » sont des commerciaux, des responsables opérations et des dirigeants de petites entreprises qui veulent simplement un tableur d’entreprises locales — pas un cours express sur le fingerprint TLS.

propose déjà des modèles Yelp prêts à l’emploi :

  • — extrait le nom de l’entreprise, la note, les coordonnées, l’adresse, les horaires et la catégorie
  • — extrait le nom d’utilisateur de l’auteur, le contenu de l’avis, la note, la date et la localisation de l’auteur

Comment ça marche en pratique

  1. Ouvrez une page de résultats Yelp ou une page d’entreprise dans Chrome
  2. Cliquez sur AI Suggest Fields dans l’ — l’IA lit la page et propose des colonnes (nom de l’entreprise, note, nombre d’avis, gamme de prix, catégorie, adresse, téléphone, URL)
  3. Cliquez sur Scrape — et c’est plié

Avec les modèles Yelp prêts à l’emploi, c’est encore plus simple : ouvre le modèle, clique sur Scrape.

Le scraping de sous-pages gère automatiquement l’enrichissement — pars d’une page de résultats Yelp, active le scraping de sous-pages, et Thunderbit visite chaque page d’entreprise pour récupérer les horaires, les avis complets, le site web, les photos et les équipements. Aucun réglage supplémentaire.

La pagination est automatique — qu’elle soit basée sur les clics ou sur le défilement, elle est prise en charge nativement. (Pour plus de détails, consulte notre .)

Les exports sont gratuits sur tous les plans — Excel, Google Sheets, Airtable, Notion, CSV, JSON. Pas de pandas, pas de code d’écriture CSV.

Comparaison du temps nécessaire

TempsScraper PythonThunderbit
Premier lancementDe quelques heures à plusieurs jours (écrire les sélecteurs, gérer la pagination, les proxys, la logique de retry)~30 secondes avec le modèle Yelp prêt à l’emploi
Quand Yelp change le balisageRéécriture manuelle des sélecteursRelancer AI Suggest Fields — réadaptation automatique
Quand l’IP est bloquéeDéboguer, faire tourner les pools de proxys, retesterLe mode cloud gère la rotation d’IP
Export vers Google SheetsÉcrire l’auth OAuth + le raccordement pandasUn clic, gratuit

Si tu testes Thunderbit d’abord et qu’il couvre ton besoin, tu peux sauter le reste de l’article. Si tu as besoin d’un contrôle programmatique complet, de champs personnalisés ou d’une montée en charge au-delà de quelques milliers d’enregistrements par mois — continue.

Bibliothèques Python pour scraper Yelp : laquelle choisir ?

« Dois-je utiliser Scrapy, BS4+requests ou Selenium ? » est l’une des questions les plus fréquentes dans les discussions r/webscraping sur Yelp. Pourtant, chaque tutoriel choisit sa bibliothèque préférée sans expliquer pourquoi. Voici une comparaison honnête.

La réalité en 2025 : requests + BeautifulSoup est cassé pour Yelp

La pile que chaque tutoriel classique Yelp recommande — pip install requests beautifulsoup4te fait bloquer dès la première requête en 2025. Pas à la 50e. À la première.

La raison : la bibliothèque requests de Python embarque une empreinte TLS/JA3 qui ne correspond à aucun navigateur réel. La couche anti-bot de Yelp la détecte au niveau de la poignée de main TLS, avant même la lecture de ton en-tête User-Agent. Je l’ai testé à répétition — nouvelle IP, en-têtes réalistes, délais aléatoires — et j’obtenais quand même immédiatement un 403 Forbidden avec requests brut.

Matrice de choix des bibliothèques

BibliothèqueIdéale pourGère le JS ?Anti-bot ?Courbe d’apprentissageVitesse
requests + BeautifulSoupScraping simple d’une seule page (cassé pour Yelp)Très faibleRapide (jusqu’au blocage)
httpx async + parselScraping asynchrone à grande échelleFaibleTrès rapide
curl_cffi + parselSpécifique Yelp : impersonation TLS✅ TLS/JA3/HTTP2FaibleTrès rapide
Scrapy 2.14Pipelines de crawl complets avec paginationPartiel (via scrapy-playwright)AutoThrottle, middleware de retryMoyenne à élevéeRapide
Selenium 4.43 / Playwright 1.58Pages très dépendantes du JS, contournement de CAPTCHAPartielMoyenneLente (~10–30 pages/min)
ThunderbitNon-développeurs, extraction rapide✅ (navigateur)Intégré (mode Cloud)Très faibleRapide

La révélation curl_cffi

La bibliothèque qui a changé mon workflow de scraping Yelp est — un binding Python pour curl-impersonate. Elle reproduit exactement la même empreinte TLS/JA3 + HTTP/2 qu’un vrai Chrome, et son API remplace requests sans changement majeur :

1from curl_cffi import requests
2r = requests.get(
3    "https://www.yelp.com/biz/some-restaurant",
4    impersonate="chrome131",
5)
6print(r.status_code, len(r.text))

Ce simple changement — from curl_cffi import requests plus impersonate="chrome131" — contourne la sans lancer de navigateur. Dans mes tests, la différence est nette : de 403 immédiats à des réponses 200 propres.

Ma pile recommandée pour Yelp en 2025 : curl_cffi + parsel + jmespath + proxys résidentiels. Si tu as besoin d’un pipeline complet avec planification, intègre ça dans Scrapy 2.14 via un middleware de téléchargement basé sur curl_cffi.

Préparer votre environnement Python pour extraire Yelp

  • Niveau : intermédiaire
  • Temps nécessaire : ~15 minutes pour l’installation, 1 à 2 heures pour un scraper fonctionnel
  • Ce qu’il vous faut : Python 3.10+ (3.12 recommandé), un terminal, et éventuellement un fournisseur de proxys résidentiels

Étape 1 : créer un environnement virtuel et installer les packages

1python3.12 -m venv .venv
2source .venv/bin/activate  # Sous Windows : .venv\Scripts\activate
3pip install "curl_cffi>=0.11" "parsel>=1.9" "jmespath>=1.0" pandas

Rôle de chaque package :

  • curl_cffi — effectue les requêtes HTTP avec l’empreinte TLS de Chrome (le contournement anti-bot)
  • parsel — sélecteurs CSS/XPath pour parser le HTML (moteur proche de Scrapy, mais plus léger)
  • jmespath — requêtes JSON déclaratives (plus propre que l’accès imbriqué à des dictionnaires pour le JSON embarqué de Yelp)
  • pandas — export des données en CSV/Excel

Optionnel mais utile :

1pip install fake-useragent  # Remarque : dépôt archivé en avril 2026, mais encore installable

Étape par étape : comment extraire Yelp avec Python

Voici le tutoriel central. L’idée clé qui rend l’ensemble bien plus robuste : évite les sélecteurs CSS, récupère plutôt le JSON caché. Yelp randomise les noms de classes CSS à la compilation (y-css-14xwok2 une semaine, y-css-hcq7b9 la suivante), donc tout scraper dépendant de ces classes casse en quelques semaines. Les payloads JSON intégrés — application/ld+json et react-root-props — sont stables.

Étape 2 : extraire les résultats de recherche Yelp

Les URL de recherche Yelp suivent un schéma prévisible : https://www.yelp.com/search?find_desc={term}&find_loc={location}. Les données des résultats sont intégrées dans une balise <script data-id="react-root-props"> sous forme de JSON — et non pas dispersées dans un fouillis de classes CSS.

1import re, json, jmespath
2from curl_cffi import requests
3from parsel import Selector
4> This paragraph contains content that cannot be parsed and has been skipped.
5> This paragraph contains content that cannot be parsed and has been skipped.
6Tu devrais obtenir une liste de dictionnaires contenant le nom de l’entreprise, l’URL, la note et le nombre d’avis. Si `react-root-props` est absent de la réponse, cela signifie que tu as reçu une coquille de blocage — change d’IP et réessaie.
7L’en-tête `Cookie: intl_splash=false` est un contournement standard du redirect Yelp vers la page de pays. Sans lui, les IP non américaines tombent sur une page d’accueil pays qui ressemble à un blocage doux, mais n’en est pas un.
8### Étape 3 : extraire les pages d’entreprise Yelp
9Chaque URL d’entreprise issue des résultats mène à une page de détail avec des données plus riches. La cible d’extraction la plus stable est le bloc `<script type="application/ld+json">` — il contient des données schema.org structurées que Yelp maintient pour le SEO et n’obfusque pas.
10```python
11def scrape_business(biz_url: str) -> dict:
12    url = f"https://www.yelp.com{biz_url}" if biz_url.startswith("/") else biz_url
13    r = requests.get(url, headers=HEADERS, impersonate="chrome131")
14    if r.status_code != 200:
15        return {"url": url, "error": r.status_code}
16    sel = Selector(text=r.text)
17    biz_id = sel.css('meta[name="yelp-biz-id"]::attr(content)').get()
18    for raw in sel.css('script[type="application/ld+json"]::text').getall():
19        try:
20            data = json.loads(raw)
21        except json.JSONDecodeError:
22            continue
23        for node in (data if isinstance(data, list) else [data]):
24            if node.get("@type") in (
25                "Restaurant", "LocalBusiness", "FoodEstablishment",
26                "HealthAndBeautyBusiness", "HomeAndConstructionBusiness",
27            ):
28                return {
29                    "biz_id": biz_id,
30                    "name": node.get("name"),
31                    "rating": (node.get("aggregateRating") or {}).get("ratingValue"),
32                    "review_count": (node.get("aggregateRating") or {}).get("reviewCount"),
33                    "address": node.get("address"),
34                    "telephone": node.get("telephone"),
35                    "price_range": node.get("priceRange"),
36                    "hours": node.get("openingHours"),
37                    "url": url,
38                }
39    return {"biz_id": biz_id, "url": url}

La valeur meta[name="yelp-biz-id"] correspond à l’identifiant encodé de l’entreprise dont tu auras besoin pour l’endpoint d’avis. Récupère-le ici — tu l’utiliseras à l’étape suivante.

Étape 4 : extraire les avis Yelp avec pagination

C’est ici que l’API Fusion montre ses limites et que le scraping prend l’avantage. L’endpoint GraphQL interne de Yelp renvoie le texte intégral des avis, les infos sur l’auteur, les dates, les notes et les comptages de votes — tout ce que l’API refuse de fournir.

L’endpoint est https://www.yelp.com/gql/batch, et il utilise un documentId statique pour l’opération GetBusinessReviewFeed. La pagination passe par un curseur encodé en base64.

1import base64
2GQL_URL = "https://www.yelp.com/gql/batch"
3DOC_ID = "ef51f33d1b0eccc958dddbf6cde15739c48b34637a00ebe316441031d4bf7681"
4> This paragraph contains content that cannot be parsed and has been skipped.
5Chaque page renvoie 10 avis. Incrémentez l’`offset` dans le curseur base64 pour paginer. Le paramètre `sortBy` accepte `DATE_DESC` (plus récents d’abord), `RATING_ASC`, `RATING_DESC` et d’autres valeurs.
6### Étape 5 : exporter vos données Yelp extraites
7```python
8import pandas as pd
9# En supposant que vous avez récupéré les entreprises et les avis
10df_businesses = pd.DataFrame(businesses)
11df_businesses.to_csv("yelp_businesses.csv", index=False)
12df_reviews = pd.DataFrame(all_reviews)
13df_reviews.to_csv("yelp_reviews.csv", index=False)
14> This paragraph contains content that cannot be parsed and has been skipped.
15Pour les lecteurs qui préfèrent le no-code, Thunderbit exporte les mêmes données directement vers Excel, Google Sheets, Airtable ou Notion — sans pandas ni code d’écriture de fichiers.
16## Le plan anti-blocage : comment scraper Yelp sans se faire bloquer
17Cette section est la vraie raison d’être de l’article. Les mesures anti-bot de Yelp sont devenues nettement plus strictes depuis fin 2024 — [fingerprinting TLS, contrôle de réputation IP, CAPTCHA et analyse comportementale](https://blog.apify.com/how-to-scrape-yelp/) sont tous de la partie. La plupart des guides existants sont obsolètes car écrits avant cette offensive.
18![yelp_antiblock_518f0447bb.png](https://strapi.thunderbit.com/uploads/yelp_antiblock_518f0447bb.png)
19La stratégie fonctionne par couches. Chaque couche réduit ton taux de blocage ; ensemble, elles rendent le scraping durablement viable.
20### Couche 1 : des en-têtes de requête réalistes
21Les en-têtes par défaut de `requests` envoient `User-Agent: python-requests/2.x` — blocage instantané. Mais un User-Agent réaliste ne suffit pas. Yelp vérifie tout l’ensemble des en-têtes [Client Hints](https://scraperapi.com/web-scraping/yelp/) pour s’assurer qu’ils collent entre eux.
22```python
23FULL_HEADERS = {
24    "authority": "www.yelp.com",
25    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
26                  "AppleWebKit/537.36 (KHTML, like Gecko) "
27                  "Chrome/124.0.0.0 Safari/537.36",
28    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
29              "image/avif,image/webp,image/apng,*/*;q=0.8",
30    "accept-language": "en-US,en;q=0.9",
31    "accept-encoding": "gzip, deflate, br",
32    "sec-ch-ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
33    "sec-ch-ua-mobile": "?0",
34    "sec-ch-ua-platform": '"Windows"',
35    "sec-fetch-dest": "document",
36    "sec-fetch-mode": "navigate",
37    "sec-fetch-site": "same-origin",
38    "sec-fetch-user": "?1",
39    "upgrade-insecure-requests": "1",
40    "referer": "https://www.yelp.com/",
41    "cookie": "intl_splash=false",
42}

Trois erreurs qui te font repérer :

  1. Le UA prétend être Chrome mais sec-ch-ua est absent ou contredit la version annoncée
  2. sec-ch-ua-platform indique "Windows" alors que la chaîne UA indique macOS
  3. Le même UA exact est utilisé pour des milliers de requêtes depuis une seule IP — fais tourner un pool de 10 à 20 chaînes récentes Chrome/Firefox/Safari

Couche 2 : limitation de débit et délais aléatoires

Des schémas temporels prévisibles sont un signal d’alerte. Ajoute des intervalles de sommeil aléatoires et mets en place un backoff exponentiel sur les erreurs.

1import random, time
2> This paragraph contains content that cannot be parsed and has been skipped.
3> This paragraph contains content that cannot be parsed and has been skipped.
4### Couche 3 : rotation des User-Agent et des sessions
5Fais tourner un pool de chaînes User-Agent réelles de navigateurs. Conserve les sessions et les cookies pour imiter un comportement de navigation naturel — Yelp utilise une détection basée sur les cookies, donc créer une nouvelle session à chaque requête est en soi suspect.
6```python
7UA_POOL = [
8    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
9    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4_1) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
10    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
11    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.4; rv:125.0) Gecko/20100101 Firefox/125.0",
12    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4_1) AppleWebKit/605.1.15 Safari/17.4.1",
13    # Ajoutez 5 à 10 chaînes récentes supplémentaires
14]

Couche 4 : rotation des proxys

À volume réel, il te faut des proxys résidentiels. Les proxys datacenter et les proxys gratuits ne fonctionnent pas sur Yelp — la couche de réputation IP de Yelp renvoie des 403 par anticipation sur les plages AWS, GCP et DigitalOcean.

FournisseurPrix d’entrée / GoRemarques
IPRoyal1,75 $/GoLe moins cher ; exécute le tutoriel Yelp le plus cité
Decodo (ex-Smartproxy)3,20–3,50 $Meilleur ratio Go/$ à grande échelle
Bright Data4,00 $ (PAYG)Plus de 150 M d’IP ; page dédiée Yelp Proxies
Oxylabs6,00–8,00 $Premium ; plus de 10 M d’IP
Aluvia (SIM mobile)3,00 $Vraies IP mobiles d’opérateurs US, pensées pour Yelp

Les proxys résidentiels tournants (nouvelle IP par requête) sont les meilleurs pour les crawls de recherche à gros volume. Les sessions persistantes (une IP conservée pendant 10 minutes) sont préférables lorsque tu dois garder les cookies tout au long d’un flux page entreprise → avis → pagination.

Couche 5 : détecter et gérer les blocages

Tous les blocages ne se présentent pas de la même manière. Yelp affiche souvent un shell générique de type « page not available » plutôt qu’un CAPTCHA, ce qui pousse les scrapers naïfs à croire qu’ils récupèrent des données alors qu’ils reçoivent en réalité une réponse vide.

1BLOCK_MARKERS = (
2    "captcha", "px-captcha", "page not available",
3    "access denied", "unusual traffic",
4)
5def is_blocked(resp):
6    if resp.status_code in (401, 403, 429, 503):
7        return True
8    body = resp.text.lower()
9    if any(m in body for m in BLOCK_MARKERS):
10        return True
11    # Si c’est une page de recherche/entreprise mais que react-root-props est absent,
12    # Yelp a renvoyé une réponse de blocage épurée
13    if "react-root-props" not in body and "/biz/" in str(resp.url):
14        return True
15    return False
SignalSignification
HTTP 403Blocage dur — IP/headers/TLS grillés
HTTP 429Limitation de débit — souvent récupérable avec backoff
HTTP 503Blocage générique ou surcharge
Redirection vers /error ou corps contenant « page not available »Blocage doux
vide avec seulement des Page de challenge en attente de JS
captcha / g-recaptcha / px-captcha dans le corpsEscalade — CAPTCHA requis
react-root-props manquant sur une page de listingRéponse de blocage épurée

Couche 6 : l’astuce de parsing résiliente — privilégier le JSON caché aux sélecteurs CSS

Il faut le répéter : Yelp randomise les noms de classes CSS à la compilation. Un scraper basé sur h3.y-css-14xwok2 cassera en quelques semaines quand Yelp déploiera h3.y-css-hcq7b9.

Les payloads qui ne bougent pas :

  • <script type="application/ld+json"> — données structurées schema.org (nom, adresse, téléphone, note, horaires)
  • <script data-id="react-root-props"> — données complètes des résultats de recherche en JSON
  • https://www.yelp.com/gql/batch — endpoint GraphQL des avis avec un documentId stable

Si tu parses des classes CSS, tu bâtis sur du sable. Parse le JSON à la place.

Couche 7 : le plan B navigateur furtif

Passe à un navigateur headless uniquement lorsque curl_cffi + proxys résidentiels ne suffisent pas — en général quand Yelp sert une page de challenge JavaScript ou un CAPTCHA.

Pour 95 % du scraping d’entreprises, de recherches et d’avis, curl_cffi + JSON caché + proxys résidentiels est plus rapide, moins cher et plus fiable qu’un navigateur. Mais si tu as besoin d’un navigateur :

This paragraph contains content that cannot be parsed and has been skipped.

Évite Selenium classique pour Yelp. Il est trop facile à fingerprint.

API Yelp Fusion vs scraping Python vs Thunderbit : comparaison complète

DimensionAPI Yelp FusionScraping PythonThunderbit
Texte intégral des avis❌ 3 extraits × ~160 caractères✅ Illimité (GraphQL)✅ Modèle d’avis intégré
Métadonnées des avis (votes, réponses du propriétaire)✅ Via champs suggérés par IA
Photos❌ (0 sur l’offre de base)✅ Illimité
Nombre max de résultats par recherche240 (contre 1 000 avant 2024)Illimité (avec pagination)Illimité
Limite journalière300–500 (nouveaux) / 5 000 (anciens)Seulement le budget proxyBasé sur des crédits (3 000/mois sur Pro)
Effort de mise en place~15 minDe quelques heures à plusieurs jours~2 minutes
Gestion anti-botN/ATon problèmeGérée (mode Cloud)
Risque légalFaible (autorisé)Moyen (zone grise des CGU)Moyen (même risque que le scraping)
Coût d’entrée29 $/mois~0,75–4 $/Go de proxys + temps de devOffre gratuite
Coût en usage intensif643 $+/mois50–500 $/mois de proxys + temps de dev38–49 $/mois
Export des donnéesJSONCSV/JSON (à coder vous-même)Excel / Sheets / Airtable / Notion — gratuit
MaintenanceFaibleÉlevée (sélecteurs cassés, anti-bot plus strict)Faible (l’IA se réadapte)

Conseils juridiques et éthiques pour scraper Yelp

Je ne suis pas avocat, et ceci ne constitue pas un conseil juridique. Mais le cadre légal a suffisamment bougé ces deux dernières années pour que ce soit utile d’en connaître les bases avant d’investir du temps dans un projet de scraping Yelp.

Ce que disent les CGU de Yelp : la interdit explicitement l’utilisation de « tout robot, spider... ou autre dispositif automatisé » pour « accéder, récupérer, copier, scraper ou indexer toute partie du Service ». Un passage sur les « AI Technologies and/or other automated tools » a aussi été ajouté.

: « Yelp n’autorise aucun scraping du site. »

Ce que dit robots.txt : le de Yelp contient un User-agent: * / Disallow: / global et bloque explicitement GPTBot, ClaudeBot, PerplexityBot, CCBot et Meta-ExternalAgent. Seuls Googlebot, Bingbot et quelques crawlers de réseaux sociaux sont autorisés.

Le précédent juridique à retenir : dans (N.D. Cal., janvier 2024), le tribunal a jugé que le scraping de données publiques accessibles sans connexion ne violait pas les CGU de Meta. La distinction clé : données publiques déconnectées vs données derrière connexion. L’affaire a établi que le scraping de données publiques ne viole probablement pas le CFAA, mais hiQ a quand même perdu sur des fondements de responsabilité civile d’État (atteinte aux biens mobiliers, détournement) et a été condamné à 500 000 $.

Recommandations pratiques :

  • Ne scrape que des pages publiques accessibles sans connexion
  • Limite le débit de tes requêtes (les pauses de ce guide servent aussi de limite éthique)
  • Ne revends pas le texte brut des avis attribué à des utilisateurs nommés — respecte la vie privée des auteurs
  • Respecte les lois locales sur la protection des données (CCPA, GDPR)
  • Ne te connecte pas pour scraper — ça franchit la ligne de l’autorisation
  • Traite les infos d’entreprise (nom/adresse/téléphone/note) comme des données factuelles publiques ; considère le texte des avis comme plus sensible

Consulte un professionnel du droit pour ta situation spécifique.

Conclusion

Trois chemins, un seul objectif.

L’API Yelp Fusion est l’option autorisée et la moins lourde à maintenir — mais elle se limite à 3 extraits d’avis et démarre à 29 $/mois. Le scraping Python te donne un contrôle total sur chaque donnée Yelp, mais demande un vrai investissement : curl_cffi pour l’impersonation TLS, des proxys résidentiels, des délais aléatoires, l’analyse du JSON caché et une maintenance continue à mesure que les défenses de Yelp évoluent. Thunderbit te fait passer de « j’ai besoin de données Yelp » à « voici mon tableur » en une trentaine de secondes, sans code ni configuration de proxy.

Les fondamentaux anti-blocage qui fonctionnent vraiment en 2025 : des en-têtes réalistes avec tous les Client Hints, curl_cffi pour imiter le fingerprint TLS, des délais aléatoires avec backoff exponentiel, la rotation de proxys résidentiels et — surtout — l’analyse du JSON caché (application/ld+json et react-root-props) plutôt que des sélecteurs CSS fragiles.

Tu hésites sur la bonne voie ? Essaie d’abord . Si elle couvre ton besoin, tu viens d’économiser des heures. Si tu as besoin de plus de contrôle — pipelines programmatiques complets, champs personnalisés, intégration CRM serrée — le guide Python ci-dessus te donne tout ce qu’il faut. Et pour aller plus loin sur l’écosystème des outils de scraping, consulte notre sélection des ou notre guide pour .

Essayer Thunderbit pour l’extraction de données Yelp

FAQ

Puis-je scraper Yelp gratuitement avec Python ?

Oui — en utilisant des bibliothèques gratuites comme curl_cffi, parsel et jmespath. Mais à partir d’un volume réel (plus de quelques dizaines de pages), il te faudra des proxys résidentiels payants, qui commencent autour de . Thunderbit propose aussi une offre gratuite avec 6 pages/mois pour une extraction rapide sans code.

Yelp bloque-t-il les scrapers ?

Oui, de manière agressive. Yelp utilise . requests brut est bloqué dès la première requête. La stratégie anti-blocage en couches décrite ici — curl_cffi pour l’impersonation TLS, des en-têtes réalistes, des délais aléatoires et des proxys résidentiels — est ce qui fonctionne en 2025.

L’API Yelp Fusion est-elle meilleure que le scraping ?

Ça dépend de ton besoin. L’API est autorisée et peu risquée, mais elle ne renvoie que , limite les résultats de recherche à 240 et commence à 29 $/mois. Si tu as besoin du texte complet des avis, des métadonnées d’avis ou de plus de quelques centaines d’enregistrements par jour, le scraping est la seule option.

Comment extraire les avis Yelp avec Python ?

Utilise curl_cffi avec impersonate="chrome131" pour récupérer la page d’entreprise, récupère l’identifiant encodé de l’entreprise dans <meta name="yelp-biz-id">, puis envoie un POST vers https://www.yelp.com/gql/batch avec l’opération GetBusinessReviewFeed et pagine via un curseur after encodé en base64. Le code détaillé étape par étape figure plus haut dans le tutoriel. Le est aussi une bonne référence d’implémentation.

Puis-je scraper Yelp sans coder ?

Oui — propose des modèles prêts à l’emploi pour les et les . Ouvre une page Yelp, clique sur AI Suggest Fields, puis sur Scrape. Les exports vers Google Sheets, Excel, Airtable et Notion sont gratuits sur tous les plans, y compris l’offre gratuite.

En savoir plus

Table des matières

Essayez Thunderbit

Extrayez des leads et d’autres données en seulement 2 clics. Propulsé par l’IA.

Obtenir Thunderbit C’est gratuit
Extraire des données avec l’IA
Transférez facilement les données vers Google Sheets, Airtable ou Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week