Das Inhaltsverzeichnis

Wie ihr vielleicht schon wisst Offizielle Google Places API ist auf 5 Bewertungen pro Ort begrenzt. Daher untersuchen die Entwickler das Scraping, um die Möglichkeit zu haben, alle Bewertungen von jedem Unternehmen auf Google Maps abzurufen.

Das Scrapen von Google mit all seinen Schutzmechanismen und dynamisch gerenderten Seiten kann eine schwierige Aufgabe sein. Glücklicherweise gibt es viele Tools, die Sie zum Scrapen von Bewertungen in Python oder einer anderen Programmiersprache verwenden können. In diesem Blog-Beitrag werden die beiden gängigsten Tools zum Scrapen von Google-Bewertungen vorgestellt: Browser-Emulation und Outscraper Platform. Jedes von ihnen reicht aus, um alle Bewertungen eines beliebigen Eintrags von Maps zu erhalten.

Scraping von Google-Rezensionen in Python mit Browser zum Rendern dynamischer Inhalte

Wir werden die Selen um den Chrome-Browser zu steuern. Der Browser wird die dynamischen Seiten von Google Reviews darstellen. Um mit dem Aufbau des Reviews Scraper mit Selenium zu beginnen, benötigen wir:

  1. Python 3+.
  2. Chrome-Browser installiert.
  3. Selenium 3.141.0+ (Python-Paket).
  4. Chrome-Treiber (für Ihr Betriebssystem).
  5. Parsel oder eine andere Bibliothek zur Extraktion von Daten aus HTML wie Beautiful Soup.

Selenium und andere Pakete installieren

Installieren Sie die Pakete Selenium und Parsel, indem Sie die folgenden Befehle ausführen. Wir werden Parsel später verwenden, wenn wir Inhalte aus HTML parsen.

				
					pip install selenium
pip install parsel # zum Extrahieren von Daten aus HTML mit XPath oder CSS-Selektoren
				
			

Starten Sie den Browser

Bevor Sie den Treiber starten, vergewissern Sie sich, dass Sie die vorherigen Schritte durchgeführt haben und dass Sie den Pfad zu Ihrer Chromedriver-Datei haben. Initialisieren Sie den Treiber mit dem folgenden Code. Sie sollten sehen, dass sich das neue Browserfenster öffnet.

				
					von selenium import webdriver


chromedrive_path = './chromedriver' # verwenden Sie den Pfad zum Treiber, den Sie aus den vorherigen Schritten heruntergeladen haben
driver = webdriver.Chrome(chromedrive_path)
				
			

Auf dem Mac sehen Sie möglicherweise Folgendes: "chromedriver kann nicht geöffnet werden, weil der Entwickler nicht verifiziert werden kann". Um dieses Problem zu beheben, klicken Sie bei gedrückter Maustaste auf den Chromedriver im Finder, wählen Sie im Menü den Eintrag Öffnen und klicken Sie dann im erscheinenden Dialog auf Öffnen. Im geöffneten Terminalfenster sollten Sie "ChromeDriver wurde erfolgreich gestartet" sehen. Schließen Sie es und danach können Sie ChromeDriver aus Ihrem Code heraus starten.

Alle Bewertungen herunterladen Seite

Sobald Sie den Treiber gestartet haben, können Sie einige Seiten öffnen. Um eine Seite zu öffnen, verwenden Sie den Befehl "get".

				
					url = 'https://www.google.com/maps/place/Central+Park+Zoo/@40.7712318,-73.9674707,15z/data=!3m1!5s0x89c259a1e735d943:0xb63f84c661f84258!4m16!1m8!3m7!1s0x89c258faf553cfad:0x8e9cfc7444d8f876!2sTrump+Tower!8m2!3d40.7624284!4d-73.973794!9m1!1b1!3m6!1s0x89c258f1fcd66869:0x65d72e84d91a3f14!8m2!3d40.767778!4d-73.9718335!9m1!1b1?hl=en&hl=en'
driver.get(url)
				
			

Parse-Bewertungen

Sobald Ihre Seite geöffnet ist, sehen Sie die Seite in Ihrem Chrome-Fenster, die durch Ihren Code gesteuert wird. Sie können den folgenden Code ausführen, um den HTML-Seiteninhalt vom Treiber abzurufen.

				
					Seite_Inhalt = driver.page_source
				
			

Um den HTML-Inhalt bequem zu sehen, öffnen Sie die Entwicklerkonsole in Chrome, indem Sie das Chrome-Menü in der oberen rechten Ecke des Browserfensters öffnen und Mehr Tools > Entwicklertools wählen. Jetzt sollten Sie die Elemente Ihrer Seite sehen können.

Google-Bewertungen in Python auslesen
Suche nach dem xpath zu den gewünschten Bewertungen mit der Entwicklerkonsole

Sie können den Inhalt der HTML-Seite mit Hilfe Ihrer bevorzugten Parsing-Tools analysieren. Wir verwenden Parsel in diesem Lernprogramm.

				
					von parsel importieren Selektor

Antwort = Selektor(Seite_Inhalt)
				
			

Gehen Sie die Bewertungen durch.

				
					Ergebnisse = []

for el in response.xpath('//div/div[@data-review-id]/div[contains(@class, "content")]'):
    results.append({
        'title': el.xpath('.//div[contains(@class, "title")]/span/text()').extract_first(''),
        'rating': el.xpath('.//span[contains(@aria-label, "stars")]/@aria-label').extract_first('').replace('stars' ,'').strip(),
        'body': el.xpath('.//span[contains(@class, "text")]/text()').extract_first(''),
    })
    
print(results)
				
			

Ausgabe des Google Reviews Crwaler (gekürzt).

				
					[
  {
    ' title': 'Wanda Garrett',
    'rating': '5',
    'body': 'Schöner ✨ Park mit einer familienfreundlichen Atmosphäre! Ich hatte eine tolle Zeit hier; all die Tiere zu sehen und all die interessanten Fakten zu lernen, war eine fantastische Art, den Tag zu verbringen. Der Zoo ist wunderschön angelegt und umgeben von ...'
  },
  {
    'title': 'Bernadette Bennett',
    'rating': '4',
    'body': 'Es lohnt sich für die Robben zu gehen! Sie sind die Hauptattraktion und befinden sich in der Mitte des Zoos. Wir haben bei einer Live-Fütterung zugesehen und es war großartig. Die Kinder haben es geliebt. Der Zoo ist gut gepflegt und von wunderschönen Gärten umgeben. Jede Menge Bänke zum Ausruhen ...'
  },
  {
    'title': 'Mary Cutrufelli',
    'rating': '3',
    'body': "Also, ich will nicht lügen... Wir kamen aus PA. Mein Kind erwartete, Löwen und Nilpferde und Zebras aus Madagaskar zu sehen. Nichts von dem, was dort ist. Es ist sauber, es ist ein schöner Zoo. Ich würde aber nicht wieder hingehen."
  },
  ...
]
				
			

Den Browser anhalten

Es ist wichtig, den Treiber vor und nach dem Scrapen entsprechend zu starten und zu stoppen. Das ist dasselbe, wie wenn Sie Ihren Browser vor und nach dem Surfen im Internet öffnen und schließen würden. Halten Sie den Browser an, indem Sie den folgenden Code ausführen.

				
					Treiber.quit()
				
			

Trotz der komplizierten HTML-Struktur von Google Reviews können Sie mit Selenium und guten Kenntnissen in XPath und CSS-Selektoren recht gute Ergebnisse beim Scraping erzielen. Diese Methode der Verwendung eines Browser-Emulators sollte Sie davor schützen, blockiert zu werden. Wenn Sie Ihre Anwendung jedoch skalieren wollen, sollten Sie auch die Verwendung von Proxys in Betracht ziehen, um unerwartete Probleme zu vermeiden.

Multiprocessing und andere Empfehlungen

Es ist möglich, Treiber im Multiprocessing (nicht Multithreading) zu betreiben, aber jeder Treiber verbraucht eine CPU. Stellen Sie sicher, dass Sie genug davon haben.

Der einfachste Weg zum Scraping von Google-Bewertungen in Python

Das Extrahieren von Daten aus Google mit Browsern hat seine Vor- und Nachteile. Sie können den Crawler zwar selbst entwickeln, aber bei der Skalierung kann dies zu hohen Kosten für die Verwendung von Servern mit einer großen Anzahl von CPUs führen, um die Emulationen der Browser zu verarbeiten. Außerdem sollte es eine Person geben, die den Crawler pflegt und ihn bei Änderungen der Google-Seiten aktualisiert.

Durch die Verwendung von Outscraper-Plattform, API, oder SDKs Outscraper bietet die einfachste Lösung für Unternehmen und Privatpersonen, um mit dem Scraping von Google-Bewertungen zu beginnen, ohne sich mit Proxys, Browseremulationen und Investitionen in die Entwicklung beschäftigen zu müssen.


Scrapen von Rezensionen in Python mit dem SDK

1. Sie benötigen Python3+ und das Python-Paket. Installieren Sie das Paket, indem Sie den Befehl ausführen.

				
					pip install google-services-api
				
			

2. Holen Sie sich Ihren API-Schlüssel von der Profil-Seite.

3. Importieren Sie das Paket und initialisieren Sie es mit dem Schlüssel.

4. Geben Sie den Ort durch Angabe eines Links, einer Ortskennung oder eines Namens an.

				
					von outscraper importieren ApiClient


api_cliet = ApiClient(api_key='KEY_FROM_OUTSCRAPER')
Antwort = api_cliet.google_maps_reviews(
    'https://www.google.com/maps/place/Do+or+Dive+Bar/@40.6867831,-73.9570104,17z/data=!3m2!4b1!5s0x89c25b96a0b10eb9:0xfe4f81ff249e280d!4m5!3m4!1s0x89c25b96a0b30001:0x643d0464b3138078!8m2!3d40.6867791!4d-73.9548217',
    language='en',
    limit=100
)
				
			

5. Warten Sie ein paar Sekunden, bis die Bewertungen abgerufen werden.

				
					[
    {
        "name": "Do or Dive Bar",
        "full_address": "1108 Bedford Ave, Brooklyn, NY 11216, United States",
        "borough": "Bedford-Stuyvesant",
        "street": "1108 Bedford Ave", "street": "1108 Bedford Ave",
        "Stadt": "Brooklyn",
        "postal_code": "11216",
        "country_code": "US",
        "Land": "Vereinigte Staaten von Amerika",
        "us_state": "New York",
        "state": "New York",
        "plus_code": null,
        "latitude": 40.686779099999995,
        "longitude": -73.9548217,
        "time_zone": "Amerika/New_York",
        "site": "https://www.doordivebedstuy.com/",
        "phone": "+1 917-867-5309",
        "Typ": "Bar",
        "rating": 4.5,
        "reviews": 425,
        "reviews_data": [
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/115539085325450648866?hl=en-US",
                "autor_name": "Sam Grjaznovs",
                "autor_id": "115539085325450648866",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GgxmEH7a10v6Bo8AFb6OkbyxxfIBPXbMYVAxeSIRA=c0x00000000-cc-rp-ba3",
                "review_text": "Cozy shin dig mit einer Auswahl an Getränken. Sie haben eine starke Spezialität für 10bucks und Merch zu. Sie haben sowohl einen Außenbereich als auch einen Hinterhof. Frag jeden zweiten Samstag nach Brandon. He\u2019s hella cute!",
                "review_img_url": "https://lh5.googleusercontent.com/p/AF1QipPNs8QvvdkBonV5wuxdoylFjLY3k7L6muepbDq-",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s115539085325450648866!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1603781021,
                "review_datetime_utc": "10/27/2020 06:43:41",
                "review_likes": 0,
                "review_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/110571545135018844510?hl=en-US",
                "autor_name": "Arabella Stephens",
                "autor_id": "110571545135018844510",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q=c0x00000000-cc-rp",
                "review_text": "Tolle Atmosphäre, immer lustige Stimmung und gute Biere. Ich wohne in der Gegend und dies ist ein sehr zuverlässiges Standby. Würde es jedem empfehlen, der nicht prätentiös ist und ein bisschen Unordnung in seiner Kneipe mag.",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q",
                "eigentümer_antwort": null,
                "Besitzer_Antwort_Zeitstempel": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s110571545135018844510!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1614111762,
                "review_datetime_utc": "02/23/2021 20:22:42",
                "review_likes": 0,
                "review_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/101725757133547547783?hl=en-US",
                "autor_name": "Jack Parker",
                "autor_id": "101725757133547547783",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw=c0x00000000-cc-rp",
                "review_text": "Alle Barkeeper sind klasse. Günstige Getränke und ein schöner Hinterhof. Es gibt Heizstrahler, aber ich würde trotzdem empfehlen, sich warm anzuziehen, wenn man vorhat, eine Weile dort zu verbringen. Der Jeopardy-Abend ist auch immer lustig. Kann es kaum erwarten, wieder drinnen zu sitzen!",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s101725757133547547783!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1611947492,
                "review_datetime_utc": "01/29/2021 19:11:32",
                "review_likes": 0,
                "review_id": "7222934207919784056"
            },
            ...
        ]
]
				
			

Video-Tutorial, wie man Google Maps Bewertungen in Python scrapen kann


Extra

Jetzt anmelden und verwenden Sie den Aktionscode OUTSCRAPER1 einen bekommen 10% AUS Rabatt.

Python-Paket ► https://pypi.org/project/google-services-api
API ► https://app.outscraper.com/api-docs

Vlad

Projektleiter Linkedin