Inhoudsopgave

Zoals je wellicht al weet, is de Officiële Google Places API is beperkt tot maximaal 5 beoordelingen per locatie. Daarom onderzoeken ontwikkelaars de mogelijkheid om alle beoordelingen van elk bedrijf op Google Maps op te halen via scraping.

Het scrapen van Google, met al zijn beveiligingen en dynamisch geladen pagina’s, kan een uitdagende klus zijn. Gelukkig zijn er veel tools die je kunt gebruiken om recensies te scrapen in Python of een andere programmeertaal. In deze blogpost maak je kennis met de twee meest gebruikte tools voor het scrapen van Google-recensies: browseremulatie en het Outscraper-platform. Beide zijn geschikt om alle recensies van elke vermelding op Google Maps te verzamelen.

Google-recensies scrapen in Python door de browser te gebruiken om dynamische inhoud weer te geven

We zullen gebruikmaken van Selenium om de Chrome-browser te besturen. De browser zal de dynamische pagina’s van Google Reviews weergeven. Om aan de slag te gaan met het bouwen van de reviewscraper met Selenium, hebben we het volgende nodig:

  1. Python 3+.
  2. De Chrome-browser is geïnstalleerd.
  3. Selenium 3.141.0+ (Python-pakket).
  4. Chrome-stuurprogramma (voor uw besturingssysteem).
  5. Parsel of een andere bibliotheek om gegevens uit HTML te halen, zoals Beautiful Soup.

Selenium en andere pakketten installeren

Installeer de pakketten Selenium en Parsel door de volgende opdrachten uit te voeren. We zullen Parsel later gebruiken om HTML-inhoud te parseren.

				
					pip install selenium
pip install parsel # to extract data from HTML using XPath or CSS selectors
				
			

Start de browser

Zorg ervoor dat je, voordat je de driver start, de voorgaande stappen hebt uitgevoerd en dat je het pad naar je chromedriver-bestand hebt. Initialiseer de driver met de volgende code. Je zou nu een nieuw browservenster moeten zien openen.

				
					from selenium import webdriver


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

Op een Mac zou je het volgende kunnen zien: “ChromeDriver kan niet worden geopend omdat de ontwikkelaar niet kan worden geverifieerd.” Om dit op te lossen, klik je met de rechtermuisknop op chromedriver in de Finder, kies je “Openen” in het menu en klik je vervolgens op ‘Openen’ in het dialoogvenster dat verschijnt. In de geopende terminalvensters zou je nu de melding ‘ChromeDriver is succesvol gestart’ moeten zien. Sluit het venster, waarna je ChromeDriver vanuit je code kunt starten.

Pagina met alle recensies downloaden

Zodra je het stuurprogramma hebt gestart, kun je pagina’s openen. Gebruik het commando “get” om een willekeurige pagina te openen.

				
					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)
				
			

Recensies analyseren

Zodra je pagina is geopend, zie je in je Chrome-venster de pagina die door je code wordt aangestuurd. Je kunt de volgende code uitvoeren om de inhoud van de HTML-pagina uit de driver op te halen.

				
					page_content = driver.page_source
				
			

Om de HTML-inhoud gemakkelijk te kunnen bekijken, open je de ontwikkelaarsconsole in Chrome door het Chrome-menu in de rechterbovenhoek van het browservenster te openen en ‘Meer hulpmiddelen’ > ‘Ontwikkelaarstools’ te selecteren. Nu zou je de elementen van je pagina moeten kunnen zien.

Google-recensies ophalen in Python
De XPath vinden naar de beoordelingen die we willen ophalen met de Developer Console

Je kunt de inhoud van de HTML-pagina parseren met behulp van je favoriete parseertools. We gebruiken Parsel in deze handleiding.

				
					from parsel import Selector

response = Selector(page_content)
				
			

Doorloop de recensies.

				
					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)
				
			

Uitvoer van de Google Reviews Crawler (ingekort).

				
					[
  {
    '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."
  },
  ...
]
				
			

Sluit de browser af

Het is belangrijk om de driver voor en na het schrapen op de juiste manier te starten en te stoppen. Dit is hetzelfde als het openen en sluiten van je browser voor en na het surfen op internet. Stop de browser door de volgende code uit te voeren.

				
					driver.quit()
				
			

Ondanks de ingewikkelde HTML-structuur van Google Reviews kun je met Selenium en een goede kennis van XPath- en CSS-selectors behoorlijk goede resultaten behalen bij het scrapen. Deze methode, waarbij je een browseremulator gebruikt, zou moeten voorkomen dat je wordt geblokkeerd. Als je je applicatie echter op grotere schaal gaat inzetten, kun je overwegen om proxyservers te gebruiken om onverwachte problemen te voorkomen.

Multiprocessing en andere aanbevelingen

Het is mogelijk om drivers in multiprocessing (niet multithreading) uit te voeren, maar elke driver neemt één CPU in beslag. Zorg ervoor dat je er genoeg hebt.

De eenvoudigste manier om Google-recensies te scrapen in Python

Het ophalen van gegevens uit Google met browsers heeft voor- en nadelen. Hoewel je de scraper zelf kunt ontwikkelen, kan dit bij opschaling leiden tot hoge kosten voor het gebruik van servers met een groot aantal CPU’s om de browseremulaties te verwerken. Bovendien is er iemand nodig die de crawler onderhoudt en bijwerkt wanneer er wijzigingen op de Google-website plaatsvinden.

Door gebruik te maken van Outscraper Platform, APIof SDK's, Outscraper biedt de eenvoudigste oplossing voor bedrijven en particulieren om beoordelingen van Google te scrapen, zonder dat ze zich bezig hoeven te houden met proxyservers, browseremulatie of investeringen in ontwikkeling.

Recensies ophalen in Python met behulp van de SDK

1. Je hebt Python 3 of hoger nodig, en dit Python-pakket. Installeer het pakket door de opdracht uit te voeren.

				
					pip install google-services-api
				
			

2. Haal je API-sleutel op via de Profielpagina.

3. Importeer het pakket en initialiseer het met de sleutel.

4. Geef de locatie op door een link, een plaats-ID of een naam op te geven.

				
					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. Wacht een paar seconden totdat de recensies zijn opgehaald.

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

Video handleiding

FAQ

Meest voorkomende vragen en antwoorden

Dankzij de Google Maps Reviews API van Outscraper is het mogelijk om alle Google Maps-recensies te scrapen. Met de API-diensten van Outscraper kun je onbeperkt scrapen.

Er bestaat een API-dienst voor Google Maps-recensies. Dit is de Google Maps Reviews API van Outscraper. Dankzij de diensten van Outscraper kun je alle Google Maps-recensies exporteren en downloaden.

Recensies kunnen met Python en Selenium worden verzameld. Dit wordt uitvoerig uitgelegd in het artikel “Alle Google-recensies ophalen in Python“.