Table des matières

Comme vous le savez peut-être déjà, la API officielle de Google Places est limité à 5 avis par lieu. C'est pourquoi les développeurs envisagent de recourir au scraping pour pouvoir récupérer tous les avis de n'importe quelle entreprise sur Google Maps.

Scraper Google avec toutes ses protections et ses pages à rendu dynamique peut être une tâche difficile. Heureusement, il existe de nombreux outils que vous pouvez utiliser pour scraper des avis en python ou dans tout autre langage de programmation. Dans ce billet de blog, vous verrez les deux outils les plus courants pour gratter les avis de Google : l'émulation de navigateur et Outscraper Platform. Chacun d'entre eux est suffisant pour obtenir tous les avis de n'importe quelle liste de cartes.

Récupérer les avis de Google en Python en utilisant le navigateur pour restituer le contenu dynamique

Nous utiliserons Sélénium pour contrôler le navigateur Chrome. Le navigateur rendra les pages dynamiques de Google Reviews. Pour commencer à construire le scraper de revues avec Selenium, nous aurons besoin de ce qui suit :

  1. Python 3+.
  2. Navigateur Chrome installé.
  3. Selenium 3.141.0+ (paquet python).
  4. Pilote Chrome (pour votre système d'exploitation).
  5. Parsel ou toute autre bibliothèque permettant d'extraire des données de HTML, comme Beautiful Soup.

Installer Selenium et d'autres paquets

Installez les paquets Selenium et Parsel en exécutant les commandes suivantes. Nous utiliserons Parsel plus tard lorsque nous analyserons le contenu du HTML.

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

Démarrer le navigateur

Avant de lancer le pilote, assurez-vous d'avoir suivi les étapes précédentes et d'avoir le chemin d'accès à votre fichier chromedriver. Initialisez le pilote avec le code suivant. Vous devriez voir la nouvelle fenêtre du navigateur s'ouvrir.

				
					from selenium import webdriver


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

Vous pouvez voir ce qui suit sur mac : "chromedriver ne peut pas être ouvert car le développeur ne peut pas être vérifié". Pour y remédier, faites un contrôle-clic sur le pilote chromé dans le Finder, choisissez Ouvrir dans le menu, puis cliquez sur Ouvrir dans la boîte de dialogue qui s'affiche. Vous devriez voir "ChromeDriver a été démarré avec succès" dans la fenêtre de terminal ouverte. Fermez-la, et après cela, vous pourrez démarrer ChromeDriver à partir de votre code.

Télécharger la page de toutes les critiques

Une fois que vous avez démarré le pilote, vous êtes prêt à ouvrir certaines pages. Pour ouvrir une page, utilisez la commande "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)
				
			

Critiques de Parse

Une fois votre page ouverte, vous verrez dans votre fenêtre Chrome la page contrôlée par votre code. Vous pouvez exécuter le code suivant pour obtenir le contenu de la page HTML à partir du pilote.

				
					page_content = driver.page_source
				
			

Pour voir confortablement le contenu HTML, ouvrez la console de développement dans Chrome en ouvrant le menu Chrome dans le coin supérieur droit de la fenêtre du navigateur et en sélectionnant Autres outils > Outils de développement. Vous devriez maintenant être en mesure de voir les éléments de votre page.

récupérer des avis sur Google en python
Trouver le chemin d'accès aux commentaires que nous voulons obtenir avec Developer Console

Vous pouvez analyser le contenu de la page HTML en utilisant vos outils d'analyse préférés. Nous utiliserons Parsel dans ce tutoriel.

				
					from parsel import Selector

response = Selector(page_content)
				
			

Faites des itérations sur les examens.

				
					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)
				
			

Résultat du Google Reviews Crawler (abrégé).

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

Arrêter le navigateur

Il est important de démarrer et d'arrêter le conducteur avant et après le raclage. C'est la même chose que d'ouvrir et de fermer votre navigateur avant et après avoir surfé sur l'internet. Arrêtez le navigateur en exécutant le code suivant.

				
					driver.quit()
				
			

Malgré la structure HTML délicate de Google Reviews, avec Selenium et une bonne connaissance de XPath et des sélecteurs CSS, vous pouvez obtenir d'assez bons résultats en scraping. Cette méthode d'utilisation d'un émulateur de navigateur devrait vous éviter d'être bloqué. Cependant, si vous faites évoluer votre application, envisagez d'utiliser des proxys pour éviter les problèmes inattendus.

Multiprocessing et autres recommandations

Il est possible d'exécuter des pilotes en multiprocessing (pas en multithreading), mais chaque pilote consommera une unité centrale. Assurez-vous d'en avoir suffisamment.

Le moyen le plus simple de récupérer les avis Google en Python

L'extraction de données de Google à l'aide de navigateurs a ses avantages et ses inconvénients. Bien que vous puissiez développer le scraper par vous-même, lors de la mise à l'échelle, cela peut entraîner des dépenses importantes pour l'utilisation de serveurs dotés d'un grand nombre de processeurs afin de gérer les émulations de navigateur. En outre, une personne doit être chargée de la maintenance du robot d'exploration et de sa mise à jour en cas de modification du site Google.

En utilisant Plate-forme OutscraperAPIou SDKs, Outscraper fournit la solution la plus facile pour les entreprises et les particuliers pour commencer à scraper les commentaires de Google sans avoir à manipuler les proxies, l'émulation de navigateur, et investir dans le développement.

Scraper des critiques en Python en utilisant le SDK

1. Vous aurez besoin de python3+ et ceci paquet python. Installez le paquet en exécutant la commande.

				
					pip install google-services-api
				
			

2. Obtenez votre clé API à partir du Page de profil.

3. Importez le package et initialisez-le avec la clé.

4. Spécifiez l'emplacement en fournissant un lien, un identifiant de lieu ou un nom.

				
					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. Patientez quelques secondes jusqu'à ce que les avis soient récupérés.

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

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

Tutoriel vidéo

FAQ

Questions et réponses les plus fréquentes

Grâce à l'API Google Maps Reviews de Outscraper, il est possible de gratter tous les avis de Google Maps. Les services API de Outscraper vous permettent de scrapper sans aucune limite.

Il existe un service API pour les avis sur Google Maps. Il s'agit de l'API Google Maps Reviews de Outscraper. Grâce aux services de Outscraper, vous pouvez exporter et télécharger tous les avis de Google Maps.

Les revues peuvent être grattées avec Python et Selenium. C'est expliqué en détail dans l'article "Scraping de tous les commentaires Google en Python“.


Vlad

Chef de projet Linkedin