Yelp scrapen 2026: Geschäftsdaten und Bewertungen extrahieren

Praktischer Leitfaden für Entwickler: Yelp-Geschäftsdaten und Bewertungstexte mit rotierenden Residential Proxies scrapen — PerimeterX umgehen, Fusion-API-Limits verstehen und ethisch bleiben.

How to Scrape Yelp Business Listings and Reviews in 2026: Public Data, PerimeterX, and Proxies
In diesem Artikel

Yelp scrapen 2026: Öffentliche Geschäftsdaten und Bewertungen extrahieren

Wer Yelp scrapen will, steht vor einer Mauer aus Anti-Bot-Systemen, TLS-Fingerprinting und IP-Reputation-Scores. Dabei sind die meisten Geschäftsdaten — Name, Adresse, Bewertungen, Kategorien, Öffnungszeiten — öffentlich und ohne Login zugänglich. Dieser Leitfaden zeigt Entwicklern, wie sie Yelp Geschäftsdaten und Yelp Bewertungen mit rotierenden Residential Proxies zuverlässig extrahieren, ohne von PerimeterX blockiert zu werden.

Rechtlicher Hinweis: Das Scraping von Yelp kann gegen die Nutzungsbedingungen (Terms of Service) von Yelp verstoßen. In den USA kann unbefugter Zugriff nach dem Computer Fraud and Abuse Act (CFAA) strafbar sein. In der EU fällt die Verarbeitung personenbezogener Daten (z. B. Namen von Review-Autoren) unter die DSGVO (GDPR). Dieser Artikel behandelt ausschließlich den Zugriff auf öffentliche, nicht login-geschützte Daten zu Bildungszwecken. Prüfen Sie stets die robots.txt und die ToS von Yelp, bevor Sie scrapen, und konsultieren Sie einen Rechtsbeistand.

Was ist ohne Login öffentlich zugänglich?

Yelp-Geschäftsprofile unter /biz/<slug> sind ohne Anmeldung vollständig sichtbar. Folgende Datenfelder sind öffentlich verfügbar:

  • Geschäftsname, Adresse, Telefonnummer — direkt im Profil-Header
  • Gesamtbewertung (1–5 Sterne) und Anzahl der Bewertungen
  • Kategorien (z. B. Restaurants, Italian, Pizza)
  • Öffnungszeiten — wöchentlich strukturiert
  • Bewertungstexte — vollständiger Text, Autor-Name (Vorname + Initial), Datum
  • Fotos — URLs zu Benutzer- und Geschäftsfotos

Yelp bietet zudem eine offizielle Fusion API, die jedoch stark limitiert ist: Sie liefert maximal 3 Bewertungen pro Geschäft und erfordert einen API-Key mit einem Rate-Limit von 5.000 Calls/Tag. Für den Aufbau umfassender lokaler Geschäftsdatasets reicht das nicht aus. Web-Scraping der öffentlichen Profilseiten ist daher oft die einzige praktikable Methode, um an die vollständigen Bewertungstexte zu gelangen.

KriteriumFusion APIWeb-Scraping
Bewertungen pro GeschäftMax. 3Alle verfügbaren
Rate-Limit5.000 Calls/TagAbhängig von Proxy-Infrastruktur
AuthentifizierungAPI-Key nötigKein Login nötig
KostenKostenlos (mit Limits)Proxy-Kosten (ab ~$10/Monat)
Anti-Bot-RisikoKeinesPerimeterX/HUMAN

Yelps Anti-Bot-Verteidigung: PerimeterX/HUMAN und TLS-Fingerprinting

Yelp setzt HUMAN Security (ehemals PerimeterX) als primären Bot-Schutz ein. Das System funktioniert in mehreren Schichten, die ein einfaches requests.get() schnell scheitern lassen.

PerimeterX injiziert ein _px3-Cookie, das einen kryptografischen Token enthält, der aus Browser-Sensordaten (Mausbewegungen, Touch-Events, Tastatur-Timing) berechnet wird. Bei der ersten Seitenladung wird ein JavaScript-Challenge ausgelöst, der den Sensor-Token generiert. Ohne gültiges _px3-Cookie werden nach wenigen Requests CAPTCHAs oder HTTP 403-Antworten zurückgegeben.

TLS-Fingerprinting (JA3-Hash)

Yelp inspiziert den TLS-Client-Hello-Handshake, um nicht-browser HTTP-Clients zu identifizieren. Ein python-requests-Client hat einen deutlich anderen JA3-Hash als ein echter Chrome-Browser. Anti-Bot-Systeme wie PerimeterX nutzen diese Fingerabdrücke, um automatisierte Clients bereits auf TCP-Ebene zu klassifizieren — noch bevor der HTTP-Body gesendet wird.

CAPTCHAs nach Datacenter-Requests

Datacenter-IPs (z. B. AWS, DigitalOcean, Hetzner) haben bei PerimeterX eine sehr niedrige IP-Reputation. Typischerweise genügen 3–5 Requests von einer Datacenter-IP, bevor ein CAPTCHA ausgelöst wird. Residential IPs aus dem US-Raum haben eine deutlich höhere Reputation und überleben deutlich mehr Requests pro IP, bevor Blockaden auftreten.

Warum rotierende Residential Proxies mit US-Geo nötig sind

Yelp personalisiert Suchergebnisse nach Standort. Eine Suche nach „Pizza“ von einer IP in Austin, TX liefert andere Ergebnisse als dieselbe Suche von einer IP in Berlin. Um realistische lokale Geschäftsergebnisse zu erhalten, müssen Sie US-basierte Residential IPs verwenden.

Mit ProxyHat können Sie Geo-Targeting direkt im Benutzernamen spezifizieren:

# US-weite Rotation
http://user-country-US:pass@gate.proxyhat.com:8080

# Stadt-level Targeting (Austin, Texas)
http://user-country-US-city-austin:pass@gate.proxyhat.com:8080

# Sticky Session für Pagination-Kontinuität
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080

Rotierende Residential Proxies bieten drei entscheidende Vorteile für Yelp-Scraping:

  • Hohe IP-Reputation: Residential IPs stammen von echten ISPs und werden von PerimeterX als legitime Nutzer eingestuft — im Gegensatz zu Datacenter-IPs, die sofort markiert werden.
  • Geo-Targeting: Sie können Stadt-level-Targeting nutzen, um lokal relevante Geschäftsergebnisse zu erhalten, die mit der jeweiligen Region übereinstimmen.
  • Rotation: Bei jedem Request wird eine neue IP verwendet, sodass einzelne IPs nicht durch häufige Anfragen auffallen und keine Reputation aufbauen müssen.

ProxyHat bietet Residential Proxies in über 90 Ländern mit Stadt-level-Geo-Targeting. Die verfügbaren Standorte umfassen alle großen US-Metropolregionen.

Praktische Implementierung: Yelp scrapen mit Python

Das folgende Beispiel zeigt, wie Sie eine Yelp-Geschäftsseite über ProxyHat abrufen und das eingebettete __INITIAL_STATE__-JSON extrahieren. Yelp bettet einen großen JSON-Blob in die Seite ein, der die meisten Geschäftsdaten und die ersten Bewertungen enthält.

import requests
import json
import re
import time
import random

# ProxyHat HTTP Proxy mit US-Geo und Sticky Session
proxy_url = "http://user-country-US-city-austin:pass@gate.proxyhat.com:8080"

proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
}

def scrape_yelp_business(slug):
    url = f"https://www.yelp.com/biz/{slug}"
    
    try:
        response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"Request failed: {e}")
        return None

    # __INITIAL_STATE__ aus dem HTML extrahieren
    match = re.search(
        r'window\.__INITIAL_STATE__\s*=\s*({.+?});',
        response.text,
        re.DOTALL
    )
    
    if not match:
        print("__INITIAL_STATE__ not found — possible CAPTCHA or block")
        return None

    try:
        state = json.loads(match.group(1))
    except json.JSONDecodeError:
        print("Failed to parse __INITIAL_STATE__ JSON")
        return None

    # Geschäftsdaten extrahieren (Struktur kann variieren)
    biz_data = state.get("bizDetailsPageProps", {}).get("bizCardInfoProps", {})
    reviews = state.get("bizDetailsPageProps", {}).get("reviewListFeedProps", {}).get("reviews", [])
    
    # Erste Bewertung (gekürzt)
    if reviews:
        review = reviews[0]
        print(f"Business: {biz_data.get('name', 'N/A')}")
        print(f"Rating: {biz_data.get('rating', 'N/A')}")
        print(f"Review by {review.get('author', {}).get('name', 'N/A')}:")
        print(f"  {review.get('comment', {}).get('text', '')[:200]}...")
    
    return state

# Beispiel-Aufruf
scrape_yelp_business("tartine-bakery-san-francisco")

# Rate-Limit-Pacing: 5-10 Sekunden zwischen Requests
time.sleep(random.uniform(5, 10))

Hinweis: Die Struktur von __INITIAL_STATE__ ändert sich regelmäßig. Verwenden Sie defensive Parsing-Logik mit .get() und Fallback-Werten, anstatt feste Pfade anzunehmen. Die obige Pfad-Struktur (bizDetailsPagePropsreviewListFeedProps) ist ein typisches Beispiel, kann aber variieren.

Node.js-Beispiel über SOCKS5 (Port 1080)

Für Node.js-Anwendungen können Sie den SOCKS5-Endpoint von ProxyHat auf Port 1080 nutzen. SOCKS5 ist besonders nützlich, wenn Sie niedrigere Latenz oder eine andere Transport-Ebene benötigen als HTTP CONNECT.

const { SocksProxyAgent } = require('socks-proxy-agent');
const fetch = require('node-fetch');

// ProxyHat SOCKS5 mit US-Geo und Rotation
const socksUrl = 'socks5://user-country-US:pass@gate.proxyhat.com:1080';
const agent = new SocksProxyAgent(socksUrl);

const headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en-US,en;q=0.9',
};

async function scrapeYelpBusiness(slug) {
  const url = `https://www.yelp.com/biz/${slug}`;
  
  try {
    const response = await fetch(url, {
      agent,
      headers,
      timeout: 30000,
    });
    
    if (!response.ok) {
      throw new Error(`HTTP ${response.status}`);
    }
    
    const html = await response.text();
    
    // __INITIAL_STATE__ extrahieren
    const match = html.match(/window\.__INITIAL_STATE__\s*=\s*({.+?});/s);
    if (!match) {
      console.error('__INITIAL_STATE__ not found');
      return null;
    }
    
    const state = JSON.parse(match[1]);
    const reviews = state?.bizDetailsPageProps?.reviewListFeedProps?.reviews || [];
    
    if (reviews.length > 0) {
      console.log(`Found ${reviews.length} reviews`);
      console.log(`First review: ${reviews[0]?.comment?.text?.substring(0, 200)}...`);
    }
    
    return state;
  } catch (error) {
    console.error('Scrape failed:', error.message);
    return null;
  }
}

// Beispiel-Aufruf mit Rate-Limit-Pacing
(async () => {
  await scrapeYelpBusiness('tartine-bakery-san-francisco');
  await new Promise(r => setTimeout(r, 5000 + Math.random() * 5000));
})();

Pagination, Rate-Limit-Pacing und Sticky Sessions

Pagination über den review_feed-Endpoint

Yelp lädt weitere Bewertungen per AJAX nach. Der Endpoint /biz/<slug>/review_feed akzeptiert einen start-Parameter für die Pagination. Bei 10 Bewertungen pro Seite bedeutet das:

# Review-Feed mit Pagination
review_feed_url = f"https://www.yelp.com/biz/{slug}/review_feed?start={offset}"

# Bei 10 Reviews pro Seite:
# start=0  → Seite 1
# start=10 → Seite 2
# start=20 → Seite 3

Rate-Limit-Pacing

Aggressives Scraping führt schnell zu Blockaden. Die folgende Pacing-Strategie hat sich in der Praxis bewährt:

  • 5–10 Sekunden Wartezeit zwischen Requests von derselben IP
  • Maximal 100 Requests pro Stunde pro Session-ID
  • Zufällige Jitter-Zeiten (random.uniform(5, 10)), um deterministische Muster zu vermeiden
  • Backoff bei HTTP 429 oder 403: 60 Sekunden Pause, dann neue Session-ID und neuer User-Agent

Sticky Sessions für Pagination-Kontinuität

Bei der Pagination über review_feed ist es wichtig, dieselbe IP zu verwenden, da PerimeterX Session-Konsistenz prüft. Verwenden Sie die -session--Flag in ProxyHat, um eine IP über mehrere Requests hinweg zu halten:

# Sticky Session — dieselbe IP für alle Pagination-Requests
session_id = "yelp-tartine-001"
proxy_url = f"http://user-country-US-session-{session_id}:pass@gate.proxyhat.com:8080"

Wechseln Sie die Session-ID nach jedem Geschäft oder nach 20–30 Requests, um die IP-Rotation zu erzwingen und die Belastung einzelner IPs zu minimieren.

Rotierende User-Agents zur Fingerprint-Reduktion

Ein einzelner User-Agent ist ein leicht erkennbares Muster. Rotieren Sie zwischen 5–10 aktuellen Browser-User-Agents, um das Fingerprint-Risiko zu senken:

import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15",
]

headers["User-Agent"] = random.choice(user_agents)

Kombinieren Sie User-Agent-Rotation mit passenden Accept- und Sec-CH-UA-Headern, um ein konsistentes Browser-Profil zu erzeugen. Inkonsistenzen (z. B. Chrome UA mit Firefox Accept-Headern) sind ein weiterer Fingerprinting-Vektor, den Anti-Bot-Systeme leicht erkennen.

ProxyHat-spezifische Einrichtung

ProxyHat bietet drei Proxy-Typen, die für Yelp-Scraping unterschiedlich geeignet sind:

Proxy-TypEignung für YelpVorteileNachteile
Residential★★★★★ Bestens geeignetHohe IP-Reputation, Geo-Targeting, PerimeterX-tauglichHöhere Kosten als Datacenter
Mobile★★★★☆ Sehr gutHöchste IP-Reputation, Carrier-IPsTeuer, begrenzte Verfügbarkeit
Datacenter★☆☆☆☆ Nicht empfohlenGünstig, schnellNiedrige IP-Reputation, CAPTCHAs nach 3–5 Requests

Für Yelp-Scraping empfehlen wir Residential Proxies mit US-Geo-Targeting. Die Preise starten bei $10/Monat für Pay-as-you-go-Tarife. Detaillierte technische Dokumentation finden Sie in den ProxyHat Docs.

Ethisches Scraping: Wann man die offizielle API nutzen sollte

Web-Scraping ist ein mächtiges Werkzeug, aber nicht immer die beste Wahl. Bevor Sie Yelp scrapen, prüfen Sie, ob die Fusion API Ihre Anforderungen abdeckt. Die Entscheidung sollte auf dem konkreten Datenbedarf basieren, nicht auf Bequemlichkeit.

Wann die Fusion API ausreicht

  • Sie benötigen nur grundlegende Geschäftsdaten (Name, Adresse, Telefon, Rating)
  • Sie benötigen maximal 3 Bewertungen pro Geschäft
  • Sie benötigen strukturierte, stabile JSON-Antworten ohne HTML-Parsing
  • Ihr Datenvolumen liegt unter 5.000 Requests/Tag

Wann Web-Scraping gerechtfertigt ist

  • Sie benötigen alle Bewertungen eines Geschäfts (nicht nur 3)
  • Sie benötigen Bewertungstexte für NLP- oder Sentiment-Analyse
  • Sie bauen ein umfassendes lokales Geschäftsdirectory auf
  • Sie analysieren historische Bewertungstrends über viele Geschäfte hinweg

Ethische Richtlinien

  • Respektieren Sie robots.txt: Prüfen Sie https://www.yelp.com/robots.txt vor dem Scraping und halten Sie sich an die Disallow-Regeln.
  • Vermeiden Sie login-geschützte Inhalte: Scrapen Sie keine Daten, die eine Anmeldung erfordern — dies verstößt gegen die ToS und kann den CFAA verletzen.
  • Personenbezogene Daten minimieren: Review-Autoren-Namen sind personenbezogene Daten unter der DSGVO. Speichern Sie nur das notwendige Minimum und anonymisieren Sie, wo möglich.
  • Rate-Limits respektieren: Überlasten Sie die Server nicht. Halten Sie sich an vernünftige Pacing-Intervalle von 5–10 Sekunden.
  • Daten nicht weiterverkaufen: Die kommerzielle Weitergabe von Yelp-Daten kann gegen die ToS verstoßen und rechtliche Konsequenzen nach sich ziehen.
Empfehlung: Wenn die Fusion API 80 % Ihrer Anforderungen abdeckt, nutzen Sie sie. Scraping sollte die Ausnahme sein, nicht die Regel. Weitere Informationen zu bewährten Scraping-Praktiken finden Sie in unserem Web-Scraping-Leitfaden.

Key Takeaways

  • Öffentliche Yelp-Daten (Geschäftsprofile, Bewertungen, Kategorien) sind ohne Login zugänglich — die Fusion API liefert jedoch nur max. 3 Bewertungen pro Geschäft bei 5.000 Calls/Tag.
  • PerimeterX/HUMAN ist die primäre Hürde: _px3-Cookie, TLS-Fingerprinting (JA3-Hash) und CAPTCHAs nach 3–5 Datacenter-Requests.
  • Rotierende Residential Proxies mit US-Geo-Targeting (-country-US-city-austin) sind unerlässlich für hohe IP-Reputation und lokal relevante Ergebnisse.
  • Sticky Sessions (-session-abc123) sichern die Pagination-Kontinuität über review_feed — wechseln Sie die Session-ID alle 20–30 Requests.
  • Rate-Limit-Pacing mit 5–10 Sekunden Jitter und rotierenden User-Agents minimiert Blockaden und Fingerprint-Risiko.
  • Ethisches Scraping: Respektieren Sie robots.txt, ToS und DSGVO. Bevorzugen Sie die Fusion API, wo möglich.

Bereit, Yelp-Daten zu extrahieren? Starten Sie mit ProxyHat Residential Proxies und testen Sie die Beispiele aus diesem Artikel. Für SERP-Tracking und andere Scraping-Anwendungsfälle siehe auch unsere SERP-Tracking-Lösungen.

Häufig gestellte Fragen

Was ist Yelp-Scraping und welche Daten sind öffentlich zugänglich?

Yelp-Scraping bezeichnet das automatisierte Extrahieren von Geschäftsdaten und Bewertungen von Yelp-Webseiten. Ohne Login zugänglich sind Geschäftsname, Adresse, Telefonnummer, Gesamtbewertung, Kategorien, Öffnungszeiten und vollständige Bewertungstexte über die Profilseiten unter /biz/. Die offizielle Fusion API liefert im Vergleich dazu maximal 3 Bewertungen pro Geschäft und ist auf 5.000 Calls/Tag begrenzt.

Welcher Proxy-Typ funktioniert am besten für Yelp-Scraping?

Rotierende Residential Proxies mit US-Geo-Targeting sind die beste Wahl für Yelp-Scraping. Sie bieten hohe IP-Reputation, da sie von echten ISPs stammen und von PerimeterX als legitime Nutzer eingestuft werden. Datacenter-IPs werden nach 3–5 Requests blockiert. Mobile Proxies sind ebenfalls sehr gut, aber teurer. Mit ProxyHat können Sie Geo-Targeting über den Benutzernamen steuern, z. B. user-country-US-city-austin:pass@gate.proxyhat.com:8080.

Wie vermeidet man Blockaden beim Yelp-Scraping?

Um Blockaden zu vermeiden, nutzen Sie rotierende Residential Proxies mit US-Geo, halten Sie 5–10 Sekunden Abstand zwischen Requests, rotieren Sie User-Agents und verwenden Sie Sticky Sessions für Pagination-Kontinuität. Bei HTTP 429 oder 403 sollten Sie 60 Sekunden pausieren und eine neue Session-ID sowie einen neuen User-Agent verwenden. Vermeiden Sie Datacenter-IPs vollständig, da diese von PerimeterX nach wenigen Requests blockiert werden.

Ist Yelp-Scraping legal?

Die Rechtslage ist komplex. In den USA kann unbefugter Zugriff nach dem Computer Fraud and Abuse Act (CFAA) strafbar sein, insbesondere wenn Login-Walls umgangen werden. In der EU fällt die Verarbeitung personenbezogener Daten wie Review-Autoren-Namen unter die DSGVO. Das Scraping rein öffentlicher Daten ohne Login ist in vielen Gerichtsbarkeiten toleriert, verstößt aber möglicherweise gegen die Terms of Service von Yelp. Konsultieren Sie immer einen Rechtsbeistand und prüfen Sie, ob die offizielle Fusion API Ihre Anforderungen abdeckt.

Werden deine Proxys beim Scraping blockiert?

Mach einen kostenlosen Proxy-Check — Blockrate, Geschwindigkeit und Anonymität in Sekunden. Ohne Anmeldung.

Proxys kostenlos prüfen
← Zurück zum Blog