Online-Bewertungen als JSON Scrapen: Yelp, Tripadvisor, Booking und Mehr
Bewertungen verraten dir Dinge, die keine Produktseite verrät. Warum Gäste ein Hotel unzufrieden verlassen. Welches Feature Käufer dazu bringt, die Software zu wechseln. Was Mitarbeiter wirklich über ein Unternehmen denken. Wenn du dieses Signal in großem Umfang willst, brauchst du die Bewertungen als Daten, nicht als Webseite, durch die du scrollst.
Sie zu sammeln ist schwieriger, als es aussieht. Dieser Guide zeigt, warum das so ist, mit welchen Review-Plugins du die Daten als sauberes JSON bekommst, wie du neue Bewertungen nach Zeitplan überwachst und wie du Bewertungen verschiedener Seiten in einem Datensatz zusammenführst.
Warum Es Schwer Ist, Bewertungen Selbst zu Scrapen
Jede Bewertungsplattform macht es dir auf etwas andere Weise schwer:
- Im HTML stehen nur wenige Bewertungen. Eine Yelp-Unternehmensseite oder eine Airbnb-Unterkunftsseite zeigt eine Handvoll Bewertungen. Der Rest wird Seite für Seite über die interne API der Plattform nachgeladen, also sieht dein HTML-Parser fast nichts.
- Die Paginierung ist der teure Teil. Tripadvisor liefert 10 Bewertungen pro Seite. Für 200 Bewertungen lädst du 20 Seiten, und jede Seite ist eine weitere Gelegenheit, blockiert zu werden.
- Anti-Bot-Systeme schützen die besten Quellen. Mehrere große Bewertungsplattformen stehen hinter kommerziellem Bot-Schutz wie DataDome oder Cloudflare. Ein einfacher
requests-Aufruf bekommt eine Challenge-Seite statt Bewertungen. - Login-Sperren verstecken einen Teil der Daten. Amazon zeigt die vollständige Bewertungsliste nur angemeldeten Kunden. Glassdoor zeigt nicht angemeldeten Besuchern drei Bewertungen pro Ansicht.
- Jede Plattform hat ihr eigenes Schema. Booking.com bewertet auf einer Skala bis 10 und teilt den Text in “gefallen” und “nicht gefallen”. Glassdoor hat Pros und Contras. Yelp hat ein einziges Textfeld. Am Ende schreibst du einen Parser pro Seite und reparierst ihn bei jeder Änderung am Markup.
Wenn du schon einmal einen Review-Scraper gebaut hast, weißt du: Der Parser ist der einfache Teil. Die eigentliche Arbeit ist, die Seiten zuverlässig zu bekommen.
Die Review-Plugins im Überblick
ScrapeUnblocker hat eine Reihe von Review-Plugins, die ein Unternehmen, ein Produkt oder eine Unterkunft entgegennehmen und deren Bewertungen bereits geparst zurückgeben. Du sendest einen POST-Request und bekommst JSON zurück. Kein Konto auf der Bewertungsplattform, kein Login, keine CSS-Selektoren.
| Plattform | Endpoint | Bewertungen pro Aufruf | Gut zu wissen |
|---|---|---|---|
| Yelp | /local/yelp-reviews | bis zu 500 | Alle Bewertungsseiten, eine Sprache pro Aufruf |
| Tripadvisor | /travel/tripadvisor-reviews | bis zu 200 | Hotels, Restaurants und Attraktionen, Antworten des Inhabers |
| Airbnb | /travel/airbnb-reviews | bis zu 500 | Alle Bewertungen, mit Airbnbs Übersetzung |
| Booking.com | /travel/booking-reviews | bis zu 270 | Die neuesten 15 pro Sprache, 18 Sprachen |
| Amazon | /marketplace/amazon-reviews | die 5 bis 13 Top-Bewertungen | Bewertung, Sterne-Histogramm und die “Customers say”-Zusammenfassung |
| Glassdoor | /reviews/glassdoor | bis zu 25 | Eine öffentliche Stichprobe, nur die US-Seite |
| Capterra | /reviews/capterra | bis zu 500 | Pros, Contras und Gründe für einen Wechsel |
| Trustpilot | /reviews/trustpilot | 20 pro Seite | TrustScore, Sterneverteilung und Antworten des Unternehmens |
Jedes Plugin hat eine eigene Seite im Scraper-Katalog mit der vollständigen Feldliste, einer Beispielantwort und seinem öffentlichen Benchmark.
Dein Erster Aufruf
Hier ist das Yelp-Plugin in Python. Der Parameter business nimmt eine Yelp-URL, den Alias des Unternehmens oder seine ID:
import os
import requests
resp = requests.post(
"https://api.scrapeunblocker.com/local/yelp-reviews",
headers={"X-ScrapeUnblocker-Key": os.environ["SU_API_KEY"]},
params={"business": "gary-danko-san-francisco", "max_reviews": "20", "sort": "newest"},
timeout=180,
)
resp.raise_for_status()
data = resp.json()
biz = data["business"]
print(biz["name"], biz["rating"], biz["reviewCount"], biz["ratingHistogram"])
for review in data["reviews"]:
print(review["date"], review["rating"], review["text"][:80])
Die Antwort besteht aus zwei Teilen. business ist die Zusammenfassung: Bewertung, Anzahl der Bewertungen, das Histogramm von 1 bis 5 Sternen und die Anzahl der Bewertungen pro Sprache. reviews ist die eigentliche Liste, jede Bewertung mit ID, Sternen, vollem Text, Datum, Autor, Fotos, Reaktionen und der Antwort des Inhabers.
Die Paginierung funktioniert bei allen Plugins gleich. Du forderst mit max_reviews oder max_results eine Anzahl an Bewertungen an, und die Antwort sagt dir, ob es mehr gibt (hasMore) und wo es weitergeht (nextStart bei Yelp, nextPage bei Tripadvisor und Capterra, nextPage oder nextOffset bei Airbnb). Außerdem meldet sie pagesFetched, also das, was dir berechnet wird.
Neue Bewertungen nach Zeitplan Überwachen
Die meisten Review-Projekte sind keine einmaligen Downloads. Du willst wissen, wann eine neue Bewertung eingeht, vor allem eine schlechte. Das Muster, das funktioniert:
- Frag zuerst die neuesten Bewertungen ab (
sort=newestbei Yelp,sort=most_recentbei Airbnb; Tripadvisor sortiert standardmäßig von neu nach alt). - Halte die Menge klein, denn du brauchst nur, was sich seit dem letzten Lauf geändert hat.
- Speichere jede Bewertungs-ID, die du schon gesehen hast, und reagiere nur auf neue IDs.
- Wo das Plugin es unterstützt, übergib ein
since-Datum, damit ältere Bewertungen gar nicht erst bei dir ankommen.
Booking.com ist genau dafür gemacht. Es liefert nur die neuesten 15 Bewertungen pro Sprache, also fragst du es regelmäßig ab und übergibst since als Datum im Format YYYY-MM-DD.
import os
import sqlite3
from datetime import date, timedelta
import requests
API = "https://api.scrapeunblocker.com"
HEADERS = {"X-ScrapeUnblocker-Key": os.environ["SU_API_KEY"]}
since = (date.today() - timedelta(days=7)).isoformat()
TARGETS = [
("yelp", "/local/yelp-reviews",
{"business": "gary-danko-san-francisco", "sort": "newest", "max_reviews": "20"}),
("tripadvisor", "/travel/tripadvisor-reviews",
{"url": "https://www.tripadvisor.com/Hotel_Review-g60763-d93589-Reviews-The_Michelangelo_New_York-New_York_City_New_York.html",
"max_reviews": "20"}),
("airbnb", "/travel/airbnb-reviews",
{"room": "35283352", "sort": "most_recent", "max_reviews": "50"}),
("booking", "/travel/booking-reviews",
{"hotel": "gb/the-savoy", "languages": "en,de", "since": since}),
]
db = sqlite3.connect("reviews.db")
db.execute("CREATE TABLE IF NOT EXISTS seen (platform TEXT, id TEXT, PRIMARY KEY (platform, id))")
for platform, path, params in TARGETS:
r = requests.post(API + path, headers=HEADERS, params=params, timeout=180)
r.raise_for_status()
data = r.json()
new = []
for review in data.get("reviews", []):
cur = db.execute("INSERT OR IGNORE INTO seen VALUES (?, ?)", (platform, str(review["id"])))
if cur.rowcount:
new.append(review)
db.commit()
print(f"{platform}: {len(new)} new reviews, {data.get('pagesFetched')} pages billed")
Lass das Skript einmal am Tag per Cron oder mit einem anderen Scheduler laufen. Der erste Lauf füllt die Tabelle, jeder weitere meldet nur, was neu ist. Von dort aus schickst du schlechte Bewertungen an Slack oder per E-Mail oder lädst alles in dein Data Warehouse.
Bewertungen in Ein Schema Zusammenführen
Sobald du mehrere Plattformen verfolgst, willst du eine Tabelle, nicht sieben. Die Unterschiede sind klein, aber real: Booking.com bewertet bis 10, Amazon nennt seinen Text body, Glassdoor und Capterra teilen ihn in Pros und Contras, und das Antwortfeld heißt auf jeder Seite anders. Eine kleine Mapping-Tabelle erledigt das:
FIELDS = {
# platform: (text fields, date field, author path, reply field, rating scale)
"yelp": (["text"], "date", ("user", "name"), "ownerResponse", 5),
"tripadvisor": (["title", "text"], "publishedDate", ("user", "name"), "ownerResponse", 5),
"airbnb": (["text"], "date", ("reviewer", "name"), "response", 5),
"booking": (["title", "positiveText", "negativeText"], "reviewDate", ("reviewer", "name"), None, 10),
"amazon": (["title", "body"], "date", ("author",), None, 5),
"glassdoor": (["title", "pros", "cons"], "date", ("jobTitle",), "employerResponse", 5),
"capterra": (["title", "comments", "pros", "cons"], "date", ("reviewer", "name"), "vendorResponse", 5),
}
def normalize(platform, r):
text_fields, date_field, author_path, reply_field, scale = FIELDS[platform]
author = r
for key in author_path:
author = author.get(key) if isinstance(author, dict) else None
return {
"platform": platform,
"id": str(r["id"]),
"rating": round(r["rating"] / scale * 5, 1) if r.get("rating") is not None else None,
"text": "\n\n".join(r[f] for f in text_fields if r.get(f)),
"date": (r.get(date_field) or "")[:10],
"author": author,
"replied": bool(reply_field and r.get(reply_field)),
}
Jetzt hat jede Bewertung eine Note auf einer Skala von 1 bis 5, ein einziges Textfeld, ein ISO-Datum und ein replied-Flag. Das reicht für Dashboards, Alerts und Sentiment-Analysen über alle deine Quellen hinweg.
Was Du mit Bewertungsdaten Bauen Kannst
- Reputations-Monitoring für Hotels und Restaurants. Verfolge neue Bewertungen auf Tripadvisor, Booking.com, Airbnb und Yelp an einem Ort, lass dich bei schlechten Noten benachrichtigen und miss, wie oft und wie schnell der Inhaber antwortet, im Vergleich zu Wettbewerbern in der Nähe.
- Produktrecherche auf Amazon. Die “Customers say”-Daten listen die Aspekte, über die Käufer sprechen (Qualität, Passform, Klang), mit Stimmung und Anzahl der Erwähnungen. Vergleiche sie über konkurrierende Produkte hinweg, um zu sehen, welche Schwäche du beheben kannst.
- Wettbewerbsanalyse für SaaS. Capterra-Bewertungen enthalten die Gründe für die Wahl eines Produkts, die Gründe für einen Wechsel und die Produkte, von denen ein Käufer gewechselt ist. Nutze
mode=searchmit einem Suchbegriff wiecrm, um alle Produkte einer Kategorie zu finden, und sieh dir dann an, wer Kunden an wen verliert und warum. - Arbeitgeber-Recherche. Glassdoor-Bewertungen kommen mit sechs Teilnoten, CEO-Zustimmung und Geschäftsaussichten. Verfolge, wie sie sich für dein Unternehmen und für die Unternehmen entwickeln, mit denen du um Talente konkurrierst.
- Mehrsprachige Sentiment-Analyse. Booking.com liefert Bewertungen in bis zu 18 Sprachen, und Airbnb liefert seine eigene Übersetzung neben dem Originaltext, sodass du alles in einer Sprache analysieren kannst.
- Datensätze für KI. Normalisierte Bewertungen sind ein sauberer Input für ein LLM, das Themen extrahiert, Beschwerden zusammenfasst oder Feature-Wünsche taggt.
Kenne die Grenzen, Bevor Du Baust
Die Plugins liefern, was jede Plattform öffentlich zeigt, und das unterscheidet sich stark:
- Amazon liefert den öffentlichen Ausschnitt einer Produktseite: Bewertung, Histogramm, “Customers say” und die Top-Bewertungen. Wenn Amazon statt der Bewertungen eine Anmeldeaufforderung zeigt, ist
reviewsGatedtrue und die Liste leer. Es ist kein vollständiger Export. - Glassdoor zeigt nicht angemeldeten Besuchern drei Bewertungen pro Ansicht. Das Plugin kombiniert mehrere Sortierungen und Sternefilter, um bis zu 25 pro Aufruf zu erreichen. Betrachte es als Stichprobe, nicht als Historie.
- Booking.com liefert die neuesten 15 Bewertungen pro Sprache. Ein
capped-Flag sagt dir, wenn ältere existieren, die nicht erreichbar sind. - Yelp listet eine Bewertungssprache pro Aufruf.
reviewsCountByLanguagezeigt dir, ob sich ein weiterer Durchlauf lohnt. - Capterra bietet nur seine Most-Helpful-Sortierung, ohne Datumsfilter, und endet bei 100 Seiten pro Produkt.
Die Abrechnung folgt den Seiten, die jede Plattform ausliefert: ein Request pro 10 Bewertungen bei Yelp, pro Bewertungsseite bei Tripadvisor (10 Bewertungen, 15 bei Restaurants), pro 50 bei Airbnb, pro 25 bei Capterra, pro Sprache bei Booking.com und pro Ansicht bei Glassdoor. Prüfe pagesFetched in jeder Antwort und setze max_reviews auf das, was du wirklich brauchst.
Noch ein Punkt: Namen und Profile von Rezensenten können personenbezogene Daten sein. Speichere nur, was dein Anwendungsfall braucht. Unser Guide dazu, ob Web Scraping legal ist, erklärt die Grundlagen.
FAQ
Bekomme ich alle Bewertungen eines Unternehmens? Bei Airbnb und Yelp ja: Die Plugins blättern durch alle Bewertungen, bis zu 500 pro Aufruf. Tripadvisor liefert bis zu 200 pro Aufruf, danach machst du mit der nächsten Seite weiter. Capterra reicht bis zu 100 Seiten à 25. Amazon, Glassdoor und Booking.com zeigen nur einen öffentlichen Ausschnitt, du bekommst also eine Stichprobe oder die neuesten Bewertungen.
Wie sammle ich nur neue Bewertungen?
Sortiere von neu nach alt, halte jeden Lauf klein, speichere die Bewertungs-IDs, die du schon kennst, und übergib ein since-Datum, wo das Plugin es unterstützt. Das Monitoring-Skript oben macht genau das.
Brauche ich ein Konto auf der Bewertungsplattform? Nein. Keines der Plugins meldet sich an oder braucht einen Partner-API-Schlüssel. Sie lesen, was die Plattform einem nicht angemeldeten Besucher zeigt.
Was kostet das? Jede abgerechnete Seite ist ein Request, und ein Request ist ein Credit: 1,00 EUR pro 1.000 bei Pay as you go, bis hinunter zu etwa 0,55 EUR pro 1.000 im Ultimate-Plan. Blockierte Requests und Timeouts werden nicht berechnet.
So Fängst Du An
Bewertungsdaten sind nur nützlich, wenn sie weiter fließen. Die schweren Teile sind Anti-Bot-Sperren, Paginierung und Schema-Änderungen, und genau die nehmen dir die Plugins ab, damit du deine Zeit in die Analyse stecken kannst.
Sieh dir die Review-Plugins im Scraper-Katalog von ScrapeUnblocker an, erstelle dann ein kostenloses Konto und führe das erste Beispiel oben mit deinem eigenen Unternehmen oder Produkt aus. Die kostenlose Testphase enthält 500 Requests, ohne Kreditkarte.
ScrapeUnblocker kostenlos testen
Über 95 % Erfolgsquote · ab 0,55 € pro 1.000 Aufrufe · 500 kostenlose Anfragen bei der Registrierung.