Web Scrape Yelp.com (2023 Update) - Eine Schritt-für-Schritt-Anleitung

Raluca Penciuc am 03. März 2023

blog-image

Yelp ist eine Plattform, auf der Nutzer nach Unternehmen suchen, Bewertungen lesen und sogar Reservierungen vornehmen können. Es ist eine beliebte Website mit Millionen von monatlichen Besuchern, was sie zu einem idealen Ziel für Data Scraping macht.

Wenn Sie wissen, wie Sie Yelp scrapen können, ist das ein mächtiges Werkzeug für Unternehmen und Unternehmer, die wertvolle Informationen über den lokalen Markt sammeln wollen.

In diesem Artikel werden wir die Vorteile des Web-Scraping von Yelp untersuchen, einschließlich Informationen darüber, wie man die Umgebung einrichtet, die Daten lokalisiert und wertvolle Informationen extrahiert.

Wir werden uns auch mit den potenziellen Geschäftsideen befassen, die mit diesen gescrapten Daten entwickelt werden können, und warum es besser ist, einen professionellen Scraper zu verwenden, als selbst welche zu erstellen. Am Ende dieses Artikels werden Sie ein solides Verständnis davon haben, wie man Yelp scrapen kann.

Einrichtung der Umgebung

Bevor wir beginnen, sollten wir uns vergewissern, dass wir die notwendigen Werkzeuge haben.

Laden Sie zunächst Node.js von der offiziellen Website herunter und installieren Sie es. Stellen Sie sicher, dass Sie die Long-Term Support (LTS) Version verwenden. Dadurch wird auch automatisch der Node Package Manager (NPM) installiert, den wir für die Installation weiterer Abhängigkeiten verwenden werden.

Für dieses Tutorial werden wir Visual Studio Code als integrierte Entwicklungsumgebung (IDE) verwenden, aber Sie können auch eine andere IDE Ihrer Wahl verwenden. Erstellen Sie einen neuen Ordner für Ihr Projekt, öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um ein neues Node.js-Projekt einzurichten:

npm init -y

Dadurch wird eine package.json-Datei in Ihrem Projektverzeichnis erstellt, in der Informationen über Ihr Projekt und seine Abhängigkeiten gespeichert werden.

Als nächstes müssen wir TypeScript und die Typdefinitionen für Node.js installieren. TypeScript bietet eine optionale statische Typisierung, die hilft, Fehler im Code zu vermeiden. Führen Sie dazu im Terminal aus:

npm install typescript @types/node --save-dev

Sie können die Installation überprüfen, indem Sie sie ausführen:

npx tsc --version

TypeScript verwendet eine Konfigurationsdatei namens tsconfig.json, um Compiler-Optionen und andere Einstellungen zu speichern. Um diese Datei in Ihrem Projekt zu erstellen, führen Sie den folgenden Befehl aus:

npx tsc -init

Stellen Sie sicher, dass der Wert für "outDir" auf "dist" gesetzt ist. Auf diese Weise trennen wir die TypeScript-Dateien von den kompilierten Dateien. Weitere Informationen über diese Datei und ihre Eigenschaften finden Sie in der offiziellen TypeScript-Dokumentation.

Erstellen Sie nun ein Verzeichnis "src" in Ihrem Projekt und eine neue Datei "index.ts". Hier werden wir den Scraping-Code speichern. Um TypeScript-Code auszuführen, müssen Sie ihn zuerst kompilieren. Um sicherzustellen, dass wir diesen zusätzlichen Schritt nicht vergessen, können wir einen benutzerdefinierten Befehl verwenden.

Gehen Sie zur Datei "package. json" und bearbeiten Sie den Abschnitt "scripts" wie folgt:

"scripts": {

"test": "npx tsc && node dist/index.js"

}

Wenn Sie das Skript ausführen wollen, müssen Sie nur "npm run test" in Ihr Terminal eingeben.

Um schließlich die Daten von der Website abzugreifen, werden wir Puppeteer verwenden, eine Headless-Browser-Bibliothek für Node.js, mit der Sie einen Webbrowser steuern und programmatisch mit Websites interagieren können. Um sie zu installieren, führen Sie diesen Befehl im Terminal aus:

npm Puppeteer installieren

Es ist sehr empfehlenswert, wenn Sie die Vollständigkeit Ihrer Daten sicherstellen wollen, da viele Websites heutzutage dynamisch generierte Inhalte enthalten. Wenn Sie neugierig geworden sind, können Sie sich die Puppeteer-Dokumentation ansehen, bevor Sie fortfahren, um zu sehen, wozu das Programm in der Lage ist.

Standort der Daten

Nachdem Sie nun Ihre Umgebung eingerichtet haben, können wir mit dem Extrahieren der Daten beginnen. Für diesen Artikel habe ich mich entschieden, die Seite eines irischen Restaurants aus Dublin zu scrapen: https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants.

Wir werden die folgenden Daten extrahieren:

  • den Namen des Restaurants;
  • die Restaurantbewertung;
  • die Anzahl der Bewertungen für das Restaurant;
  • die Website des Unternehmens;
  • die Rufnummer des Unternehmens;
  • die physischen Adressen der Restaurants.

Alle diese Informationen sind in der nachstehenden Abbildung hervorgehoben:

blog-image

Wenn Sie die Entwicklertools für jedes dieser Elemente öffnen, können Sie die CSS-Selektoren sehen, die wir zum Auffinden der HTML-Elemente verwenden werden. Wenn Sie mit der Funktionsweise von CSS-Selektoren noch nicht vertraut sind, können Sie diesen Leitfaden für Einsteiger nutzen.

Extrahieren der Daten

Bevor wir unser Skript schreiben, sollten wir uns vergewissern, dass die Installation von Puppeteer ordnungsgemäß verlaufen ist:

import puppeteer from 'puppeteer';

async function scrapeYelpData(yelp_url: string): Promise<void> {

// Launch Puppeteer

const browser = await puppeteer.launch({

headless: false,

args: ['--start-maximized'],

defaultViewport: null

})

// Create a new page

const page = await browser.newPage()

// Navigate to the target URL

await page.goto(yelp_url)

// Close the browser

await browser.close()

}

scrapeYelpData("https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants")

Hier öffnen wir ein Browserfenster, erstellen eine neue Seite, navigieren zu unserer Ziel-URL und schließen den Browser. Der Einfachheit halber und für das visuelle Debugging öffne ich das Browserfenster in maximierter Größe im Nicht-Headless-Modus.

Werfen wir nun einen Blick auf die Struktur der Website:

blog-image

Es scheint, dass Yelp eine etwas schwierige Seitenstruktur aufweist, da die Klassennamen zufällig generiert werden und nur sehr wenige Elemente eindeutige Attributwerte haben.

Aber keine Angst, wir können bei der Lösung kreativ werden. Erstens, um den Namen des Restaurants zu erhalten, zielen wir auf das einzige "h1"-Element auf der Seite.

// Extract restaurant name

const restaurant_name = await page.evaluate(() => {

const name = document.querySelector('h1')

return name ? name.textContent : ''

})

console.log(restaurant_name)

Um nun die Restaurantbewertung zu erhalten, können Sie feststellen, dass neben den Sternsymbolen der explizite Wert im Attribut "aria-label" vorhanden ist. Wir zielen also auf das "div"-Element ab, dessen "aria-label"-Attribut mit der Zeichenkette "star rating" endet.

// Extract restaurant rating

const restaurant_rating = await page.evaluate(() => {

const rating = document.querySelector('div[aria-label$="star rating"]')

return rating ? rating.getAttribute('aria-label') : ''

})

console.log(restaurant_rating)

Und schließlich (für diesen speziellen HTML-Abschnitt) sehen wir, dass wir die Nummer der Rezension leicht erhalten können, indem wir das hervorgehobene Ankerelement anvisieren.

// Extract restaurant reviews

const restaurant_reviews = await page.evaluate(() => {

const reviews = document.querySelector('a[href="#reviews"]')

return reviews ? reviews.textContent : ''

})

console.log(restaurant_reviews)

Kinderleicht. Werfen wir einen Blick auf das Widget für Geschäftsinformationen:

blog-image

Leider können wir uns in dieser Situation nicht auf CSS-Selektoren verlassen. Glücklicherweise können wir auf eine andere Methode zurückgreifen, um die HTML-Elemente zu finden: XPath. Wenn Sie sich mit der Funktionsweise von CSS-Selektoren noch nicht so gut auskennen, können Sie diesen Leitfaden für Anfänger nutzen.

Um die Website des Restaurants zu extrahieren, wenden wir die folgende Logik an:

Suchen Sie das Element "p" mit dem Textinhalt "Business website";

das folgende Geschwisterkind ausfindig machen

das Ankerelement und sein "href"-Attribut zu finden.

// Extract restaurant website

const restaurant_website_element = await page.$x("//p[contains(text(), 'Business website')]/following-sibling::p/a/@href")

const restaurant_website = await page.evaluate(

element => element.nodeValue,

restaurant_website_element[0]

)

console.log(restaurant_website)

Für die Telefonnummer und die Adresse können wir genau dieselbe Logik anwenden, mit zwei Ausnahmen:

  • für die Telefonnummer, stoppen wir das folgende Geschwisterkind und extrahieren dessen textContent-Eigenschaft ;
  • für die Adresse, zielen wir auf das folgende Geschwisterelement des übergeordneten Elements.
// Extract restaurant phone number

const restaurant_phone_element = await page.$x("//p[contains(text(), 'Phone number')]/following-sibling::p")

const restaurant_phone = await page.evaluate(

element => element.textContent,

restaurant_phone_element[0]

)

console.log(restaurant_phone)

// Extract restaurant address

const restaurant_address_element = await page.$x("//a[contains(text(), 'Get Directions')]/parent::p/following-sibling::p")

const restaurant_address = await page.evaluate(

element => element.textContent,

restaurant_address_element[0]

)

console.log(restaurant_address)

Das Endergebnis sollte wie folgt aussehen:

The Boxty House

4.5 Sterne Bewertung

948 Bewertungen

/biz_redir?url=http%3A%2F%2Fwww.boxtyhouse.ie%2F&cachebuster=1673542348&website_link_type=website&src_bizid=EoMjdtjMgm3sTv7dwmfHsg&s=16fbda8bbdc467c9f3896a2dcab12f2387c27793c70f0b739f349828e3eeecc3

(01) 677 2762

20-21 Temple Bar Dublin 2

Umgehung der Bot-Erkennung

Während das Scrapen von Yelp anfangs einfach erscheint, kann der Prozess komplexer und schwieriger werden, wenn Sie Ihr Projekt erweitern. Die Website setzt verschiedene Techniken ein, um automatisierten Datenverkehr zu erkennen und zu verhindern, so dass Ihr Scraper in größerem Umfang blockiert wird.

Yelp sammelt mehrere Browserdaten, um einen eindeutigen Fingerabdruck zu erstellen und Ihnen zuzuordnen. Einige dieser Daten sind:

  • Eigenschaften des Navigator-Objekts (deviceMemory, hardwareConcurrency, platform, userAgent, webdriver, usw.)
  • Zeit- und Leistungskontrollen
  • Servicekräfte
  • Prüfung der Bildschirmabmessungen
  • und viele mehr

Eine Möglichkeit, diese Herausforderungen zu überwinden und das Scrapen in großem Maßstab fortzusetzen, ist die Verwendung einer Scraping-API. Diese Art von Diensten bietet eine einfache und zuverlässige Möglichkeit, auf Daten von Websites wie yelp.com zuzugreifen, ohne dass Sie einen eigenen Scraper entwickeln und pflegen müssen.

WebScrapingAPI ist ein Beispiel für ein solches Produkt. Sein Proxy-Rotationsmechanismus vermeidet CAPTCHAs gänzlich, und seine erweiterte Wissensbasis macht es möglich, die Browserdaten nach dem Zufallsprinzip so zu gestalten, dass sie wie ein echter Benutzer aussehen.

Die Einrichtung ist schnell und einfach. Alles, was Sie tun müssen, ist, ein Konto zu registrieren, damit Sie Ihren API-Schlüssel erhalten. Auf diesen können Sie über Ihr Dashboard zugreifen, und er wird zur Authentifizierung der von Ihnen gesendeten Anfragen verwendet.

blog-image

Da Sie Ihre Node.js-Umgebung bereits eingerichtet haben, können wir das entsprechende SDK verwenden. Führen Sie den folgenden Befehl aus, um es zu Ihren Projektabhängigkeiten hinzuzufügen:

npm install webscrapingapi

Jetzt müssen wir nur noch eine GET-Anfrage senden, um das HTML-Dokument der Website zu erhalten. Beachten Sie, dass dies nicht der einzige Weg ist, um auf die API zuzugreifen.

import webScrapingApiClient from 'webscrapingapi';

const client = new webScrapingApiClient("YOUR_API_KEY");

async function exampleUsage() {

const api_params = {

'render_js': 1,

'proxy_type': 'residential',

}

const URL = "https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants"

const response = await client.get(URL, api_params)

if (response.success) {

console.log(response.response.data)

} else {

console.log(response.error.response.data)

}

}

exampleUsage();

Wenn Sie den Parameter "render_js" aktivieren, senden wir die Anfrage mit einem Headless-Browser, so wie Sie es zuvor in diesem Tutorial getan haben.

Nachdem Sie das HTML-Dokument erhalten haben, können Sie eine andere Bibliothek verwenden, um die gewünschten Daten zu extrahieren, z. B. Cheerio. Noch nie davon gehört? Dieser Leitfaden hilft Ihnen bei den ersten Schritten!

Schlussfolgerung

In diesem Artikel finden Sie eine umfassende Anleitung zum Web-Scraping von Yelp mit TypeScript und Puppeteer. Wir haben den Prozess des Einrichtens der Umgebung, des Auffindens und Extrahierens von Daten durchgespielt und erklärt, warum die Verwendung eines professionellen Scrapers eine bessere Lösung ist als die Erstellung eines eigenen.

Die von Yelp gesammelten Daten können für verschiedene Zwecke verwendet werden, z. B. zur Ermittlung von Markttrends, zur Analyse der Kundenstimmung, zur Überwachung von Wettbewerbern, zur Erstellung gezielter Marketingkampagnen und vieles mehr.

Insgesamt kann das Scraping von Yelp.com für jeden, der sich einen Wettbewerbsvorteil auf seinem lokalen Markt verschaffen möchte, eine wertvolle Hilfe sein, und dieser Leitfaden bietet einen guten Ausgangspunkt dafür.

Nachrichten und Aktualisierungen

Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Vorschaubild
LeitfädenWie man Amazon-Produktdaten scrappt: Ein umfassender Leitfaden zu Best Practices & Tools

Entdecken Sie die Komplexität des Scrapens von Amazon-Produktdaten mit unserem ausführlichen Leitfaden. Von Best Practices und Tools wie der Amazon Scraper API bis hin zu rechtlichen Aspekten erfahren Sie, wie Sie Herausforderungen meistern, CAPTCHAs umgehen und effizient wertvolle Erkenntnisse gewinnen.

Suciu Dan
Autorenavatar
Suciu Dan
15 Minuten lesen
Vorschaubild
LeitfädenWeb Scraping API Schnellstartanleitung

Starten Sie mit WebScrapingAPI, der ultimativen Web-Scraping-Lösung! Sammeln Sie Echtzeitdaten, umgehen Sie Anti-Bot-Systeme und genießen Sie professionellen Support.

Mihnea-Octavian Manolache
Autorenavatar
Mihnea-Octavian Manolache
9 Minuten lesen
Vorschaubild
AnwendungsfälleXPath vs. CSS-Selektoren

Sind XPath-Selektoren besser als CSS-Selektoren für Web Scraping? Erfahren Sie mehr über die Stärken und Grenzen der einzelnen Methoden und treffen Sie die richtige Wahl für Ihr Projekt!

Mihai Maxim
Autorenavatar
Mihai Maxim
8 Minuten lesen