Das Inhaltsverzeichnis
Wie Sie vielleicht bereits wissen, ist die 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 zur Steuerung des Chrome-Browsers. Der Browser rendert die dynamischen Seiten von Google Reviews. Um mit der Erstellung des Bewertungs-Scrapers mit Selenium zu beginnen, benötigen wir Folgendes:
- Python 3+.
- Chrome-Browser installiert.
- Selenium 3.141.0+ (Python-Paket).
- Chrome-Treiber (für Ihr Betriebssystem).
- 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 # to extract data from HTML using XPath or CSS selectors
Browser starten
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.
from selenium import webdriver
chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
Auf einem Mac wird möglicherweise Folgendes angezeigt: “chromedriver kann nicht geöffnet werden, da der Entwickler nicht verifiziert werden kann.” Um dieses Problem zu beheben, klicken Sie im Finder mit der rechten Maustaste auf “chromedriver”, wählen Sie im Menü den Eintrag „Öffnen“ aus und klicken Sie anschließend im angezeigten Dialogfenster auf „Öffnen“. In den geöffneten Terminalfenstern sollte nun die Meldung „ChromeDriver wurde erfolgreich gestartet“ angezeigt werden. Schließen Sie das Terminal, und anschließend können Sie ChromeDriver über Ihren Code starten.
Alle Bewertungen herunterladen Seite
Sobald Sie den Treiber gestartet haben, können Sie 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.
page_content = 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.
Sie können den Inhalt der HTML-Seite mit Hilfe Ihrer bevorzugten Parsing-Tools analysieren. Wir verwenden Parsel in diesem Lernprogramm.
from parsel import Selector
response = Selector(page_content)
Gehen Sie die Bewertungen durch.
results = []
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-Bewertungs-Crawlers (gekürzt).
[
{
'title': 'Wanda Garrett',
'rating': '5',
'body': 'Beautiful ✨ park with a family-friendly atmosphere! I had a great time here; seeing all of the animals and learning all of the interesting facts was a fantastic way to spend the day. The zoo is beautifully landscaped and surrounded by …'
},
{
'title': 'Bernadette Bennett',
'rating': '4',
'body': 'Worth going for the seals! They are the main attraction and located in the center of the zoo. We watched a live feeding and it was great. The kids loved it. The zoo is well manicured surrounded by gorgeous gardens. Lots of benches to rest …'
},
{
'title': 'Mary Cutrufelli',
'rating': '3',
'body': "So not gonna lie... We came from PA. My kid expected to see lions and hippos and zebra from Madagascar. None of that which is there. It's clean it's a nice zoo. I wouldn't go again though."
},
...
]
Den Browser anhalten
Es ist wichtig, den Treiber vor und nach dem Scraping entsprechend zu starten und zu beenden. Das ist genauso, wie wenn man den Browser vor und nach dem Surfen im Internet öffnet und schließt. Beenden Sie den Browser, indem Sie den folgenden Code ausführen.
driver.quit()
Trotz der komplizierten HTML-Struktur von Google Reviews lassen sich mit Selenium und fundierten Kenntnissen in XPath und CSS-Selektoren recht gute Ergebnisse beim Scraping erzielen. Diese Methode, bei der ein Browser-Emulator zum Einsatz kommt, sollte Sie davor schützen, gesperrt zu werden. Wenn Sie Ihre Anwendung jedoch skalieren, sollten Sie den Einsatz 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 Browseremulationen 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.
from outscraper import ApiClient
api_cliet = ApiClient(api_key='KEY_FROM_OUTSCRAPER')
response = 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 wurden.
[
{
"name": "Do or Dive Bar",
"full_address": "1108 Bedford Ave, Brooklyn, NY 11216, United States",
"borough": "Bedford-Stuyvesant",
"street": "1108 Bedford Ave",
"city": "Brooklyn",
"postal_code": "11216",
"country_code": "US",
"country": "United States of America",
"us_state": "New York",
"state": "New York",
"plus_code": null,
"latitude": 40.686779099999995,
"longitude": -73.9548217,
"time_zone": "America/New_York",
"site": "https://www.doordivebedstuy.com/",
"phone": "+1 917-867-5309",
"type": "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 with an assortment of drinks. They have a strong specialty for 10bucks and merch too. They have out side dining as well as back yard area. Ask for Brandon every other Saturday. 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,
"reviews_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": "Great atmosphere, always fun vibe and good beers. I live in the area and this is a very reliable standby. Would recommend to anyone who is not pretentious and likes a bit of clutter in their watering hole.",
"review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q",
"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!1s110571545135018844510!2s0x0:0x643d0464b3138078?hl=en-US",
"review_rating": 5,
"review_timestamp": 1614111762,
"review_datetime_utc": "02/23/2021 20:22:42",
"review_likes": 0,
"reviews_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": "All the bartenders are rad. Cheap drinks, and a nice backyard. They have space heaters, but I would still recommend bundling up if you plan on spending a while there. Jeopardy night is always fun too. Can\u2019t wait to sit inside again!",
"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,
"reviews_id": "7222934207919784056"
},
...
]
]
Python-Paket ► https://pypi.org/project/google-services-api
API ► https://app.outscraper.com/api-docs
Video-Anleitung
FAQ
Häufigste Fragen und Antworten
Dank der Google Maps Reviews API von Outscraper ist es möglich, alle Google Maps-Bewertungen zu scrapen. Mit den API-Diensten von Outscraper können Sie ohne jegliche Einschränkungen scrapen.
Es gibt einen API-Dienst für Google Maps-Bewertungen. Dabei handelt es sich um die Google Maps Reviews API von Outscraper. Dank der Dienste von Outscraper können Sie alle Google Maps-Bewertungen exportieren und herunterladen.
Bewertungen lassen sich mit Python und Selenium auslesen. Dies wird im Artikel “Scraping aller Google-Bewertungen in Python“.