Yelp beherbergt Hunderte von Millionen nutzergenerierter Bewertungen lokaler Unternehmen, und dieses öffentliche Feedback ist eines der reichhaltigsten Signale im offenen Web dafür, wie ein Restaurant, ein Geschäft oder eine Dienstleistung tatsächlich wahrgenommen wird. Analysten lesen es, um die Stimmung im Zeitverlauf zu verfolgen, Betreiber lesen es, um wiederkehrende Beschwerden zu finden, und Forscher lesen es, um eine ganze Kategorie von Unternehmen auf einmal zu vergleichen. Das Nützliche steht direkt auf jeder Unternehmensseite: eine Sternebewertung, der Bewertungstext und das Datum der Veröffentlichung.

Dieser Leitfaden zeigt Ihnen, wie Sie Yelp-Bewertungen crawlen und scrapen mit JavaScript und Node.js unter Verwendung von cheerio. Sie erstellen einen kleinen, lauffähigen Scraper, der eine öffentliche Yelp-Unternehmensseite mit Bewertungen über die Crawling API abruft, die Bewertung, den Text und das Datum jeder Rezension parst, die Seitennavigation der Bewertungen verwaltet und das Ergebnis als JSON und CSV exportiert. Der gesamte Walkthrough beschränkt sich auf öffentliche Bewertungsdaten und ist für die Aggregat-Analyse konzipiert, nicht zur Profilierung einzelner Rezensenten. Lesen Sie den Abschnitt zur Rechtslage gegen Ende, bevor Sie dies auf ein reales Volumen anwenden.

Was Sie erstellen werden

Ein Node.js-Skript, das eine öffentliche Yelp-Unternehmens-URL entgegennimmt, das gerenderte HTML über die Crawling API abruft und einen strukturierten Datensatz für jede Bewertung auf der Seite extrahiert. Wir verwenden eine Restaurantseite als durchgehendes Beispiel und ziehen diese Felder pro Bewertung heraus:

  • Bewertung die Sternebewertung, die der Rezensent hinterlassen hat, zum Beispiel "4 von 5".
  • Text der öffentliche Inhalt der Bewertung, der Teil, den Sie tatsächlich analysieren.
  • Datum das Datum, an dem die Bewertung veröffentlicht wurde, für Sortierung und Trendanalysen.

Beachten Sie, was nicht auf dieser Liste steht. Wir erfassen bewusst weder den Namen des Rezensenten, den Profillink, das Foto noch den Standort. Das sind personenbezogene Daten, und der Sinn dieses Tutorials ist die Aggregatanalyse: Stimmung, wiederkehrende Themen, Bewertungsverteilung im Zeitverlauf. Behandeln Sie eine Bewertung als Bewertungszahl, einen Textblock und ein Datum, niemals als Dossier über eine Person.

Warum eine einfache Anfrage bei Yelp scheitert

Wenn Sie eine Yelp-Unternehmens-URL mit einem einfachen HTTP-Client anfragen, erhalten Sie selten die Bewertungen zurück. Zwei Dinge arbeiten gegen Sie. Erstens rendert Yelp die Bewertungsliste im Browser mit JavaScript, sodass das anfängliche HTML eine nahezu leere Hülle ist, bis die Skripte der Seite ausgeführt werden. Zweitens kennzeichnet Yelp automatisierten Traffic aggressiv: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden mit einem CAPTCHA herausgefordert, ratenbegrenzt oder blockiert, bevor sie die gerenderten Bewertungen erreichen.

Ein funktionierender Yelp-Scraper benötigt also zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender Residential-Proxys zusammenstellen, aber diese zu verknüpfen und funktionsfähig zu halten, ist der Großteil der Arbeit. Die Crawling API kombiniert beides in einem einzigen Aufruf: Sie senden die URL, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zurück, das Sie mit cheerio parsen können. Yelp ist JS-gerendert, daher fordern wir es mit eingeschaltetem Rendering an.

Aggregat, nicht individuell

Alles Folgende ist so strukturiert, dass die Ausgabe in der Masse nützlich und als Profil unbrauchbar ist. Wir ziehen Bewertung, Text und Datum heraus und lassen die Identität des Rezensenten auf der Seite. Wenn Ihre Analyse wirklich nach Rezensent gewichten muss, pseudonymisieren oder hashen Sie eine Kennung zum Zeitpunkt der Erfassung, damit der gespeicherte Datensatz den Text nie mit einer namentlich genannten Person verknüpft.

Voraussetzungen

Sie benötigen einige Dinge, bevor Sie Code schreiben können. Keines davon dauert lange.

Grundlegendes JavaScript und Node.js. Sie sollten in der Lage sein, ein Node-Skript zu schreiben, auszuführen und Pakete mit npm zu installieren. Wenn Sie neu bei Node sind, deckt der Leitfaden zum Erstellen eines Web-Scrapers mit Node.js die Grundlagen ab, die dieses Tutorial voraussetzt.

Node.js 16 oder höher. Überprüfen Sie Ihre Version mit node --version. Wenn Sie es nicht haben, installieren Sie es von der Node.js-Website oder über einen Versionsmanager wie nvm.

Ein Crawlbase-Konto und Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihren JavaScript-Anfrage-Token. Das kostenlose Kontingent gibt Ihnen bis zu 20.000 Anfragen ohne Kreditkarte. Da Yelp Rendering benötigt, verwenden Sie den JavaScript-Token anstelle des normalen. Behandeln Sie den Token wie ein Passwort: Er authentifiziert Ihre Anfragen, halten Sie ihn also aus der Versionskontrolle heraus.

Projekt einrichten

Erstellen Sie einen Projektordner, initialisieren Sie ihn und installieren Sie die zwei Bibliotheken, die der Scraper benötigt.

bash
node --version

mkdir yelp-reviews && cd yelp-reviews
npm init -y

npm install crawlbase cheerio

Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Node-Client für die Crawling API, und cheerio parst das zurückgegebene HTML mit einer jQuery-ähnlichen API, sodass Sie einzelne Felder per CSS-Selektor herausziehen können. Die ältere Version dieses Tutorials verwendete request und cheerio; wir behalten cheerio und denselben Selektoransatz bei und ersetzen den rohen HTTP-Aufruf durch den offiziellen Client, damit Rendering und Wiederholungsversuche für Sie übernommen werden. Erstellen Sie eine Datei namens yelp-scraper.js in diesem Ordner und fügen Sie den Code aus den folgenden Schritten hinzu.

Schritt 1: Die gerenderte Bewertungsseite abrufen

Beginnen Sie damit, die fertige Seite zu laden. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JavaScript-Token und fordern Sie die Unternehmens-URL an. Yelp rendert Bewertungen clientseitig, daher übergeben wir pageWait, um den Skripten einen Moment Zeit zu geben, die Liste zu befüllen, bevor die API das HTML erfasst. Die Überprüfung des Statuscodes vor dem Parsen macht Fehler laut statt still.

javascript
const { CrawlingAPI } = require('crawlbase');

const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

const yelpPageURL =
  'https://www.yelp.com/biz/sushi-yasaka-new-york';

api
  .get(yelpPageURL, { pageWait: 3000 })
  .then((response) => {
    if (response.statusCode === 200) {
      console.log(response.body.slice(0, 500));
    }
  })
  .catch((error) => console.error('API request error:', error));

Führen Sie das Skript mit node yelp-scraper.js aus und Sie sollten echtes Yelp-Markup am Anfang des Bodys sehen, keine abgespeckte Hülle. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben. Die Beispiel-URL verweist auf eine öffentliche Restaurantseite; ersetzen Sie sie durch eine andere öffentliche Unternehmensseite und derselbe Ablauf gilt.

Crawlbase Crawling API

Diese erste Anfrage hat soeben eine vollständig gerenderte Yelp-Seite zurückgegeben, ohne einen Headless-Browser oder einen Proxy auf Ihrer Seite. Die Crawling API führt die Seite in einem echten Browser aus, wartet bis die Bewertungsliste befüllt ist, rotiert serverseitig durch Residential-IPs und verarbeitet die CAPTCHAs, die Yelp Scrapern entgegenwirft, sodass Sie fertiges HTML aus einem Aufruf erhalten. Testen Sie es zuerst auf einer einzelnen öffentlichen Unternehmensseite im kostenlosen Kontingent.

Schritt 2: Jede Bewertung mit cheerio parsen

Mit dem gerenderten HTML in der Hand laden Sie es in cheerio und gehen die Bewertungsblöcke durch. Yelp legt jede Bewertung in einem sich wiederholenden Container an, sodass Sie alle Bewertungen auswählen und dann die Bewertungszahl, den Text und das Datum aus dem Inneren lesen. Die alten Selektoren für diese Seite waren .review.review--with-sidebar für den Bewertungscontainer und .review-content p für den Bewertungstext; wir behalten diese bei und fügen Bewertungszahl und Datum hinzu. Das defensive Lesen jedes Feldes verhindert, dass ein fehlender Wert den Lauf zum Absturz bringt.

javascript
const cheerio = require('cheerio');

function parseReviews(html) {
  const $ = cheerio.load(html);
  const reviews = [];

  // Legacy container selector, kept faithfully
  const blocks = $('.review.review--with-sidebar');

  blocks.each((index, element) => {
    const block = $(element);

    // Public review text
    const text = block.find('.review-content p').text().trim();

    // Rating: read it from the star widget's aria/title text
    const ratingLabel =
      block.find('[role="img"][aria-label*="star"]').attr('aria-label') ||
      block.find('.i-stars').attr('title') ||
      '';
    const ratingMatch = ratingLabel.match(/([\d.]+)\s*star/i);
    const rating = ratingMatch ? parseFloat(ratingMatch[1]) : null;

    // Date the review was posted
    const date = block
      .find('.review-content .rating-qualifier, span[class*="date"]')
      .first()
      .text()
      .trim();

    if (text) {
      reviews.push({ rating, date, text });
    }
  });

  return reviews;
}

Einige Details halten dies seitengetreu. Der Bewertungstext stammt aus .review-content p, genau wie im ursprünglichen Tutorial. Die Bewertungszahl ist bei Yelp kein Klartext; sie sitzt in einem Stern-Widget-Element, dessen aria-label oder title so etwas wie "4 star rating" angibt, daher zieht ein kleiner Regex die Zahl heraus. Das Datum sitzt im selben Bewertungsinhalt-Block. Jeder Datensatz ist nur { rating, date, text }, ohne Rezensenten-Namen, absichtlich. Wenn eine Bewertung keinen Textteil hat, überspringen wir sie, statt eine leere Zeile zu speichern.

Selektoren driften

Die Klassennamen von Yelp ändern sich ohne Vorankündigung, und die genauen Bewertungs- und Datumsselektoren oben müssen möglicherweise auf einer Live-Seite aktualisiert werden. Behandeln Sie sie als Startvorlage, nicht als Vertrag. Wenn ein Feld leer zurückkommt, überprüfen Sie die Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Wenn Sie einen Auffrischungskurs zum Erstellen robuster Selektoren möchten, lesen Sie den Leitfaden zum Crawlen von JavaScript-Websites. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal.

Schritt 3: Seitennavigation der Bewertungen verwalten

Eine einzelne Seite zeigt nur den ersten Teil der Bewertungen. Yelp paginiert den Rest mit einem start-Abfrageparameter, der in Schritten vorrückt (üblicherweise 10 Bewertungen pro Seite), also ist ?start=10 die zweite Seite, ?start=20 die dritte usw. Um die Bewertungen eines Unternehmens zu sammeln, gehen Sie diese Offsets durch, bis eine Seite keine Bewertungsblöcke mehr zurückgibt, und rufen und parsen jede Seite mit den bereits geschriebenen Funktionen.

javascript
async function crawlPage(pageUrl) {
  const response = await api.get(pageUrl, { pageWait: 3000 });
  if (response.statusCode === 200) return response.body;
  console.error(`Request failed: ${response.statusCode}`);
  return null;
}

async function crawlAllReviews(businessUrl, maxPages = 5) {
  const all = [];

  for (let page = 0; page < maxPages; page++) {
    const start = page * 10;
    const url = `${businessUrl}?start=${start}`;
    const html = await crawlPage(url);
    if (!html) break;

    const pageReviews = parseReviews(html);
    if (pageReviews.length === 0) break; // no more reviews

    all.push(...pageReviews);

    // Pace requests so we stay a polite visitor
    await new Promise((r) => setTimeout(r, 2000));
  }

  return all;
}

Die Schleife stoppt auf der ersten leeren Seite, bei einer Nicht-200-Antwort oder wenn sie maxPages erreicht, sodass Sie nie endlos laufen. Die zweisekündige Pause zwischen den Abrufen hält Ihre Anfragerate moderat, was bei einem schwierigen Ziel wie Yelp wichtiger ist als rohe Geschwindigkeit. Halten Sie maxPages niedrig, während Sie entwickeln, und erhöhen Sie es erst, wenn die Parse-Ausgabe richtig aussieht.

Schritt 4: Das vollständige Skript mit JSON- und CSV-Export zusammenstellen

Verbinden Sie jetzt Abruf, Parsen und Paginierung zu einem lauffähigen Skript und schreiben Sie dann die aggregierten Datensätze als JSON und CSV auf die Festplatte. Das CSV enthält nur Bewertungszahl, Datum und Text, die drei Felder, die Stimmungs- und Themenanalyse antreiben.

javascript
const fs = require('fs');
const { CrawlingAPI } = require('crawlbase');
const cheerio = require('cheerio');

const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

function toCsv(rows) {
  const headers = ['rating', 'date', 'text'];
  const escape = (value) =>
    `"${String(value ?? '').replace(/"/g, '""')}"`;
  const lines = [headers.join(',')];
  for (const row of rows) {
    lines.push(headers.map((h) => escape(row[h])).join(','));
  }
  return lines.join('\n');
}

async function main() {
  const businessUrl =
    'https://www.yelp.com/biz/sushi-yasaka-new-york';

  const reviews = await crawlAllReviews(businessUrl, 5);
  if (reviews.length === 0) {
    console.log('No reviews parsed; check your selectors.');
    return;
  }

  fs.writeFileSync('reviews.json', JSON.stringify(reviews, null, 2));
  fs.writeFileSync('reviews.csv', toCsv(reviews));
  console.log(`Saved ${reviews.length} reviews to JSON and CSV`);
}

main();

Fügen Sie die Funktionen parseReviews, crawlPage und crawlAllReviews aus den früheren Schritten in dieselbe Datei ein, damit main sie aufrufen kann. Führen Sie es mit node yelp-scraper.js aus und Sie erhalten zwei Dateien: reviews.json mit den vollständigen strukturierten Datensätzen und reviews.csv, bereit zum Öffnen in einer Tabellenkalkulation oder zum Einspeisen in eine Analyse-Pipeline. Der toCsv-Helper setzt jedes Feld in Anführungszeichen und verdoppelt eingebettete Anführungszeichen, was hier wichtig ist, weil Bewertungstext lang ist und häufig Kommas und Zeilenumbrüche enthält.

Wie die Ausgabe aussieht

Die JSON-Datei enthält ein Objekt pro Bewertung, jedes mit Bewertungszahl, Datum und Text. Keine Rezensenten-Identität ist vorhanden, was genau das ist, was Sie für Aggregatarbeit wollen.

json
[
  {
    "rating": 5,
    "date": "3/14/2024",
    "text": "Consistently fresh fish and quick service at lunch. The omakase set is great value for the quality."
  },
  {
    "rating": 3,
    "date": "2/2/2024",
    "text": "Good food but the wait was long on a weekend. Worth it if you can get there early."
  }
]

Das CSV spiegelt dieselben Zeilen mit einer Kopfzeile wider, sodass es direkt in Excel, Google Sheets oder jede Datenpipeline eingefügt werden kann, die durch Trennzeichen getrennte Dateien liest.

csv
rating,date,text
"5","3/14/2024","Consistently fresh fish and quick service at lunch. The omakase set is great value for the quality."
"3","2/2/2024","Good food but the wait was long on a weekend. Worth it if you can get there early."

Bewertungen in aggregierte Erkenntnisse umwandeln

Der Sinn des Sammelns von Bewertungen liegt darin, was Sie in der Masse lernen, nicht in einem einzelnen Eintrag. Sobald die Daten in JSON oder CSV vorliegen, können Sie die Bewertungsverteilung berechnen, die durchschnittliche Bewertung nach Monat anhand des Datumsfeldes verfolgen und den Bewertungstext durch Stimmungsscoring oder Themenclusterung laufen lassen, um wiederkehrende Themen wie Wartezeiten, Preise oder Service aufzudecken. Dafür braucht man keinen Namen des Rezensenten, und das Weglassen von Namen ist sowohl sauberer als auch sicherer.

Wenn Sie den Text in ein Modell einspeisen möchten, normalisieren Sie ihn zunächst: Entfernen Sie Boilerplate, reduzieren Sie Leerzeichen und entscheiden Sie, wie Sie mit nicht englischen Bewertungen umgehen. Der Leitfaden zum Strukturieren und Bereinigen gescrapeter Daten für AI und ML führt durch diesen Schritt. Für das breitere Muster des Abrufens und Vergleichens von Feedback aus verschiedenen Quellen behandelt der Leitfaden zum Scrapen von Kundenbewertungen denselben Aggregat-First-Ansatz für andere Bewertungsplattformen.

Entsperrt bleiben

Selbst mit gehandhabtem Rendering beobachtet Yelp Scraper-ähnlichen Traffic. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwierige kommerzielle Ziel.

  • Pacing Ihrer Anfragen. Halten Sie die Verzögerung zwischen paginierten Abrufen ein, wie es das Skript tut. Das Verteilen von Anfragen ist der entscheidende Faktor, um unter Yelps Ratenbeschränkungen zu bleiben.
  • Auf Rotation setzen. Ein Pool von Residential-IPs verteilt Anfragen auf viele echte Nutzerapressen, sodass keine einzelne ein Limit oder ein CAPTCHA auslöst. Die Crawling API übernimmt das für Sie; wenn Sie Ihren eigenen Stack verwenden, ist dies der Teil, den Sie richtig machen müssen.
  • Statuscodes lesen. Ein Lauf, der beginnt, Herausforderungen oder Nicht-200-Antworten zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Tier nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückhalten, nicht als Rauschen zum Ignorieren.

Für das breitere Vorgehen lesen Sie, wie Sie Websites scrapen, ohne blockiert zu werden.

Ob das Scrapen von Yelp erlaubt ist, hängt von Yelps Nutzungsbedingungen, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Yelps Nutzungsbedingungen schränken das Kopieren oder Scrapen von Inhalten der Website ausdrücklich ein, ob von Hand oder mit Bots, Erweiterungen oder Software, sodass die automatisierte Erfassung unabhängig von der Sorgfalt Ihres Werkzeugs gegen diese Bedingungen verstoßen kann. Keiner der hier aufgeführten Codes ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie Yelps Nutzungsbedingungen und die robots.txt und behandeln Sie beide als Grenze für das, was Sie sammeln. Der sauberste Weg für jedes echte Volumen oder kommerzielle Nutzung ist die offizielle Yelp Fusion API, die Unternehmens- und Bewertungsdaten unter klaren, sanktionierten Bedingungen bereitstellt.

Bewertungstext und Sternebewertungen, die auf einer Unternehmensseite angezeigt werden, sind öffentlich, aber die Personen, die sie geschrieben haben, sind aus der Perspektive des Datenschutzrechts nicht anonym. Namen, Profillinks, Fotos und Standorte von Rezensenten sind personenbezogene Daten. Im Rahmen der DSGVO und des CCPA erfordert die Verarbeitung dieser Daten eine Rechtsgrundlage, und Einzelpersonen behalten Rechte daran. Deshalb sammelt dieses Tutorial bewusst nur Bewertungszahl, Text und Datum, und wir empfehlen, die Bewertung einer Person nicht gebunden an ihre Identität zu speichern, zu verwenden als Schlüssel oder zu veröffentlichen. Halten Sie Ihre Analyse aggregiert: Stimmung, Themen und Bewertungstrends, niemals ein Profil eines einzelnen Rezensenten.

Einige Leitlinien, die es wert sind, einzuhalten: Sammeln Sie nur öffentliche Bewertungsinhalte, scrapen Sie in einem langsamen und respektvollen Tempo und halten Sie Ihr Anfragevolumen so niedrig, dass Sie Yelps Server nicht belasten. Bleiben Sie von allem hinter einem Login fern. Verbreiten Sie Yelps urheberrechtlich geschützte Inhalte, einschließlich Bewertungsmedien, nicht als Ihr eigenes. Wenn Sie in einer DSGVO- oder CCPA-Gerichtsbarkeit tätig sind oder Daten über Personen dort erfassen und Ihre Nutzung personenbezogene Daten berührt, holen Sie sich rechtlichen Rat, bevor Sie fortfahren. Im Zweifelsfall ist die Yelp Fusion API oder eine Datenvereinbarung der richtige Weg, kein ausgefeilterer Scraper.

Zusammenfassung

Wichtigste Erkenntnisse

  • Yelp rendert Bewertungen clientseitig und blockiert aggressiv. Eine einfache Anfrage gibt eine leere Hülle oder ein CAPTCHA zurück, sodass Sie die Seite hinter einer vertrauenswürdigen IP rendern müssen, bevor Sie sie parsen.
  • Die Crawling API erledigt beides in einem Aufruf. Sie rendert die Seite mit dem JavaScript-Token, wartet auf die Bewertungsliste, rotiert Residential-IPs und verarbeitet CAPTCHAs, und gibt fertiges HTML zurück, das mit cheerio geparst werden kann.
  • Parsen Sie nur Bewertungszahl, Text und Datum. Behalten Sie die alten Selektoren .review.review--with-sidebar und .review-content p, fügen Sie die Stern-Widget-Bewertung und das Datum hinzu, und gehen Sie den start-Offset für die Paginierung durch.
  • Bleiben Sie aggregiert und datenschutzkonform. Lassen Sie Rezensenten-Namen aus dem Datensatz heraus; analysieren Sie Stimmung, Themen und Bewertungstrends, und erstellen Sie niemals ein Profil einer Einzelperson oder veröffentlichen Sie eine an eine Person gebundene Bewertung.
  • Bevorzugen Sie die offizielle API für Volumen. Respektieren Sie Yelps ToS und robots.txt, beachten Sie DSGVO und CCPA bei personenbezogenen Daten, und nutzen Sie die Yelp Fusion API oder eine Datenvereinbarung für kommerzielle oder groß angelegte Nutzung.

Häufig gestellte Fragen

Das hängt von Yelps Nutzungsbedingungen, Ihrer Gerichtsbarkeit und Ihrer Nutzung ab. Yelps Bedingungen schränken das Scrapen von Inhalten ein, sodass die automatisierte Erfassung dagegen verstoßen kann. Bewertungstext und Bewertungen sind öffentlich, aber die Identität des Rezensenten ist personenbezogene Daten, die durch Gesetze wie die DSGVO und den CCPA abgedeckt sind. Beschränken Sie die Erfassung auf öffentliche Bewertungsinhalte, bleiben Sie aggregiert, scrapen Sie langsam und bevorzugen Sie die offizielle Yelp Fusion API für jedes echte Volumen oder kommerzielle Nutzung.

Warum gibt eine einfache Anfrage unvollständige Daten von Yelp zurück?

Weil Yelp seine Bewertungsliste clientseitig mit JavaScript rendert und automatisierten Traffic mit CAPTCHAs herausfordert. Eine rohe HTTP-Anfrage von einer Datacenter-IP gibt meist eine leere Hülle oder eine Blockierseite anstelle der Bewertungen zurück. Um eine vollständige Seite zu erhalten, müssen Sie sie hinter einer vertrauenswürdigen IP rendern und den Skripten Zeit geben, die Liste zu befüllen, was die Crawling API für Sie übernimmt.

Wie bekomme ich alle Bewertungen statt nur der ersten Seite?

Yelp paginiert Bewertungen mit einem start-Abfrageparameter, der in Schritten von etwa zehn vorwärts geht, also ist ?start=10 Seite zwei, ?start=20 Seite drei usw. Gehen Sie diese Offsets in einer Schleife durch, rufen Sie jede Seite ab, parsen Sie sie und stoppen Sie, wenn eine Seite keine Bewertungsblöcke zurückgibt oder Sie Ihr Seitenlimit erreicht haben. Die Funktion crawlAllReviews in diesem Leitfaden macht genau das, mit einer Pause zwischen den Abrufen.

Soll ich Rezensenten-Namen speichern?

Nein. Namen, Profillinks und Fotos von Rezensenten sind personenbezogene Daten, und dieses Tutorial ist für die Aggregatanalyse konzipiert, nicht für die Profilierung. Speichern Sie nur Bewertungszahl, Text und Datum. Wenn Ihre Analyse wirklich nach Rezensent unterscheiden muss, pseudonymisieren oder hashen Sie eine Kennung zum Zeitpunkt der Erfassung, damit der gespeicherte Datensatz den Text nie mit einer namentlich genannten Person verknüpft, und respektieren Sie alle geltenden DSGVO- oder CCPA-Verpflichtungen.

Meine Bewertungszahl oder mein Datum kommt leer zurück. Was hat sich geändert?

Mit großer Wahrscheinlichkeit das Markup von Yelp. Seine Klassennamen und die Struktur des Stern-Widgets ändern sich ohne Vorankündigung, sodass früher funktionierende Selektoren brechen können. Überprüfen Sie einen Live-Bewertungsblock in den Entwicklertools Ihres Browsers, bestätigen Sie, wo das Rating-aria-label oder title und das Datum jetzt liegen, und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal.

Gibt es eine offizielle Möglichkeit, Yelp-Bewertungsdaten zu erhalten?

Ja. Die Yelp Fusion API ist Yelps sanktioniertes Programm für den Zugriff auf Unternehmensinformationen und einen begrenzten Satz von Bewertungsdaten unter klaren Bedingungen. Für kommerzielle Projekte, große Mengen oder alles, wo Sie garantierte Struktur und Nutzungsrechte benötigen, ist die Fusion API oder eine direkte Datenvereinbarung das richtige Werkzeug, kein Scraper.

Jetzt loslegen

Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.

Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.

Self-Service · Kein Verkaufsgespräch erforderlich · Enterprise-Crawl-Volumen verfügbar