Das Inhaltsverzeichnis

As you might already know, the 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 to control the Chrome browser. The browser will render the dynamic pages of Google Reviews. To get started with building the reviews scraper with Selenium, we’ll need the following:

  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 # to extract data from HTML using XPath or CSS selectors
				
			

Start the 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.

				
					from selenium import webdriver


chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
				
			

You might see the following on mac: “chromedriver cannot be opened because the developer cannot be verified.” To overcome this, control-click the chromedriver in Finder, choose Open from the menu and then click Open in the dialog that appears. You should see “ChromeDriver was started successfully” in the opened terminal windows. Close it, and after this, you will be able to start ChromeDriver from your code.

Alle Bewertungen herunterladen Seite

Once you start the driver, you are ready to open some pages. To open any page, use the “get” command.

				
					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.

Google-Bewertungen in Python auslesen
Finding Xpath to the Reviews We Want to Get With Developer Console

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)
				
			

Output from the Google Reviews Crawler (shortened).

				
					[
  {
    '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

It’s important to start and stop the driver before and after the scraping accordingly. It’s the same as opening and closing your browser before and after surfing the internet. Stop the browser by running the following code.

				
					driver.quit()
				
			

Despite the tricky HTML structure of Google Reviews, with Selenium and good knowledge of XPath and CSS selectors, you can achieve quite good results in scraping. This method of using a browser emulator should protect you from getting blocked. However, if you scale your application, consider using proxies to avoid unexpected problems.

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-PlattformAPI, 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. Wait a few seconds till the reviews are fetched.

				
					[
    {
        "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 package ► https://pypi.org/project/google-services-api
API ► https://app.outscraper.com/api-docs

Video-Anleitung

FAQ

Häufigste Fragen und Antworten

Thanks to Outscraper’s Google Maps Reviews API, it is possible to scrape all Google Maps reviews. Outscraper API services allow you to scrape without any limits.

There is an API service for Google Maps reviews. This is Outscraper’s Google Maps Reviews API. Thanks to Outscraper services, you can export and download all Google Maps reviews.

Reviews can be scraped with Python and Selenium. It is explained in detail in the article “Scraping aller Google-Bewertungen in Python“.


Vlad

Projektleiter Linkedin