Hoe Yelp Bedrijfs- en Beoordelingsgegevens te Scrapen voor Marktonderzoek
Yelp heeft zijn anti-bot houding het afgelopen jaar aangescherpt en de voorwaarden verbieden scraping volledig. Hier is hoe de gegevens zijn gestructureerd, hoe residentiële geo IP's er toegang toe krijgen, en de conforme routes die het waard zijn om te kennen.
Yelp is een van de rijkste bronnen van lokale bedrijfsinformatie - beoordelingen, beoordelingsteksten, contactgegevens en categoriedata over miljoenen vermeldingen. Het is ook een van de lastigere doelen om te scrapen. De voorwaarden van Yelp verbieden scraping volledig, en de site heeft zijn anti-bot houding merkbaar aangescherpt het afgelopen jaar, waardoor eenvoudige scripts die eerder werkten nu tegen muren aanlopen. Deze gids behandelt hoe Yelp zijn gegevens structureert, hoe geo-gematchte residentiële proxies er toegang toe krijgen, de praktische limieten, en de conforme routes die het waard zijn om te kennen voordat je iets bouwt.
Wat is het waard om te scrapen - en de realiteit van de ToS
De waardevolle velden zijn de voor de hand liggende: bedrijfsnaam, adres, telefoonnummer, sterbeoordeling, aantal beoordelingen, categorie en de beoordelingstekst zelf met de mening van de beoordelaar. Geaggregeerd over een metrogebied, drijven die gegevens concurrentieanalyse, lokale marktgrootte en sentimenttracking. Voordat je begint, wees realistisch over de regels. De eigen ondersteuningspagina's van Yelp stellen dat de site geen scraping, indexering of mining van zijn inhoud toestaat onder Sectie 6(b) van de Servicevoorwaarden. Dat maakt verzameling technisch niet onmogelijk, maar het betekent wel dat dit een doel is waarbij je de waarde afweegt tegen de voorwaarden, de voorkeur geeft aan openbare niet-persoonlijke gegevens, en het volume bescheiden houdt. Ons overzicht van de legaliteit van web scraping in 2026 schetst het bredere plaatje - en niets hiervan is juridisch advies.
Hoe Yelp zijn gegevens structureert
Het meest nuttige om te weten: de gegevens die je wilt zijn zelden in de zichtbare HTML. Yelp vult zijn pagina's aan met JSON ingebed in <script> tags, en zijn beoordelingslijsten laden van interne JSON endpoints. Dus de betrouwbare aanpak is om de embedded payload te pakken in plaats van te vechten tegen kwetsbare CSS-selectors tegen een React DOM:
import requests, re, json
proxy = "http://USER:PASS@us.quantumproxies.io:8000" # geo-matched
proxies = {"http": proxy, "https": proxy}
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
r = requests.get("https://www.yelp.com/biz/example-business-san-francisco",
headers=headers, proxies=proxies, timeout=25)
# Yelp embeds page state as JSON inside script tags
for blob in re.findall(r'<script[^>]+application/json[^>]*>(.*?)</script>', r.text, re.S):
try:
data = json.loads(blob)
except ValueError:
continue
# inspect data for businessName, rating, reviewCount, phone
Beoordelingspagina's pagineren met een start offset die in stappen van ongeveer tien toeneemt. Een praktische limiet is hier van belang: geautomatiseerde Yelp-verzameling bereikt meestal een maximum van ongeveer 240 resultaten per zoekopdracht, omdat Yelp beperkt hoe diep zijn eigen resultaatpaginering gaat. Plan je dekking rond die limiet - segmenteer op stad, categorie en buurt in plaats van eindeloos door één brede zoekopdracht te bladeren:
def yelp_search(term, loc, cap=240):
"""Page a Yelp search via the `start` offset (steps of 10, ~240 ceiling)."""
results = []
for start in range(0, cap, 10):
r = requests.get("https://www.yelp.com/search",
params={"find_desc": term, "find_loc": loc, "start": start},
headers=headers, proxies=proxies, timeout=25)
page = parse_hydration(r.text) # your JSON extractor from above
if not page:
break # empty page = end of results
results.extend(page)
return results
Twee parse-opmerkingen besparen uren. Yelp's beoordelingstekst en beoordelaarsmetadata zitten in de embedded payload naast de bedrijfsvelden, dus zodra je de juiste JSON blob hebt gevonden, heb je zelden een tweede verzoek per pagina nodig. En omdat de site een React-app is, veranderen de zichtbare klassenamen vaak terwijl het embedded dataschema veel stabieler is - veranker je extractie aan de JSON-sleutels, niet aan de DOM, en je scraper overleeft herontwerpen die op selectors gebaseerde tools van de ene op de andere dag breken.

Geo targeting is het hele spel
Yelp is een lokaal product, dus resultaten hangen sterk af van waar het verzoek vandaan lijkt te komen. Een "koffie" zoekopdracht die naar een New York exit wordt gestuurd, geeft andere bedrijven en volgorde dan dezelfde zoekopdracht vanuit een San Francisco exit. Als je onderzoek een specifieke metro richt, moet je proxy in die metro uitkomen - alles anders levert scheve gegevens op. Een residentieel proxy pool met stadsgerichte targeting in meer dan 200 landen laat je de exit vastpinnen op de markt die je analyseert, wat je ook binnen de vertrouwensband houdt die Yelp's anti-bot laag verwacht voor lokaal verkeer.
Geo controle ontsluit ook de meest waardevolle analyse die Yelp ondersteunt: het vergelijken van dezelfde categorie over metro's. Voer één zoekopdracht uit - "koffie", "loodgieters", "sportscholen" - over tien steden vanuit tien bijpassende residentiële exits en je krijgt gemiddelde beoordelingen, beoordelingsvolume en prijsklasse stad per stad. Die vergelijkende dataset is de ruggengraat van lokale marktgrootte, en geen enkele locatie-scrape kan dat produceren.
Krijg geo-gerichte residentiële proxies
Voorbij de anti-bot aanpak komen
Sinds Yelp de detectie heeft aangescherpt, scheiden drie dingen een run die voltooit van een die vastloopt op uitdagingen. Gebruik residentiële IP's die zijn afgestemd op de doelgeo, niet datacenterbereiken. Stuur een volledige, coherente browser header set - een echte Chrome of Safari User-Agent met bijpassende Accept en Accept-Language, niet een standaard bibliotheekstring. En pace conservatief met jitter, want uitbarstingen van één IP zijn de snelste trigger. Wanneer Yelp toch opschaalt naar JavaScript-uitdagingen of CAPTCHAs, is dat het signaal om te stoppen met handmatig rollen en de pagina over te dragen aan een Scraper API die JavaScript rendert, een echte browser fingerprint draagt en IP's voor je roteert - meestal een hogere succesratio voor minder code.

Conforme alternatieven die het waard zijn om te kennen
Voordat je je commit aan scraping, weeg twee goedgekeurde routes. Yelp's officiële Fusion API retourneert bedrijfsdetails en een beperkte selectie van beoordelingsgegevens onder een API-sleutel en snelheidslimieten - minder flexibiliteit, maar geen ToS wrijving. En Yelp publiceert een open dataset van miljoenen beoordelingen, foto's en bedrijfsattributen voor onderzoeksgebruik onder zijn eigen licentie; het is een statische momentopname in plaats van live gegevens, maar voor modeltraining of historische analyse is het vaak alles wat je nodig hebt. Voor live concurrentie- en beoordelingsmonitoring over bronnen, passen dezelfde technieken zich aan aan Google Maps bedrijfsgegevens, Trustpilot beoordelingen en TripAdvisor.
Veelgestelde vragen
Is het legaal om Yelp te scrapen?
Yelp's Servicevoorwaarden verbieden expliciet het scrapen, indexeren en minen van zijn inhoud, dus verzameling gebeurt tegen de verklaarde regels van de site, zelfs wanneer het openbare pagina's betreft. Beoordelaarsnamen zijn ook persoonlijke gegevens onder de AVG en vergelijkbare wetten. Geef de voorkeur aan de Fusion API of open dataset waar ze passen, houd het volume bescheiden, en raadpleeg een advocaat voor alles op schaal. Dit is geen juridisch advies.
Hoeveel resultaten kun je per Yelp-zoekopdracht scrapen?
Ongeveer 240 bedrijven per zoekopdracht gemiddeld, omdat Yelp beperkt hoe diep zijn resultaatpaginering gaat. Om een markt volledig te dekken, segmenteer je zoekopdrachten op stad, categorie en buurt in plaats van door één brede zoekopdracht te bladeren - veel smalle zoekopdrachten verslaan één diepe.
Waarom krijg ik verschillende Yelp-resultaten van verschillende servers?
Omdat Yelp locatiebewust is en resultaten personaliseert op basis van de geografie van het verzoekende IP. Een zoekopdracht uitgevoerd vanuit een andere stad of land levert andere bedrijven en volgorde op. Voor nauwkeurig lokaal onderzoek, gebruik een residentiële proxy die uitkomt in de exacte metro die je analyseert.
Waar staan de gegevens op een Yelp-pagina?
Meestal in embedded JSON, niet de zichtbare HTML. Yelp vult zijn React-pagina's aan met JSON binnen <script> tags en laadt beoordelingen van interne JSON endpoints, dus het parsen van de embedded payload is betrouwbaarder dan het matchen van CSS-selectors tegen een DOM die vaak verandert.
Yelp is scrapable met de juiste aanpak - parse de embedded JSON, exit vanuit de doelmetro op residentiële IP's, respecteer de ~240-per-zoekopdracht limiet, en pace conservatief. Maar weeg het af tegen Yelp's voorwaarden en de conforme Fusion API en open dataset eerst. Wanneer de anti-bot laag opschaalt, is een beheerde Scraper API de pragmatische volgende stap.