Comment scraper les établissements sur Google Maps avec Python 3 et Selenium?

Arrêtez de copier le net. Scrapez le.

 

Comment scraper les établissements sur Google Maps avec Python 3 et Selenium?

google maps est une magnifique source de données: on y trouve tous les commerces de proximité, avec des données de contact fraîches mises à jour par les propriétaires eux-même, et des données de fréquentation ajoutées par les utilisateurs, qui nous donnent des informations *critiques* sur la qualité d’un établissement:

Vous avez dit restaurant libanais sympa à marseille ?

Quelles données allons-nous récupérer sur le site?

Notre objectif est de récupérer toutes les *informations publiques* de l’établissement :

  • nom
  • catégorie
  • reviews
  • score
  • prix
  • adresse
  • téléphone
  • website

Visible juste là:

Allons-y!

Étape 0: la navigation

Comment allons-nous nous déplacer sur le site pour obtenir ces éléments là?

En point d’entrée, nous allons prendre un **URL de recherche Google Maps**

On notera par ailleurs que chaque URL de recherche Google Maps est composé de 3 attributs:

  • mot clé
  • latitude
  • longitude
  • le niveau de zoom

Par exemple: https://www.google.com/maps/search/restaurant+marseille/@43.285015,5.3752173,14z

Décomposé donc comme suit:

La navigation va donc être très simple:

  1. accéder à la page avec la liste des établissements
  2. cliquer sur chaque établissement pour récupérer les infos

Etape 1: l’installation

Pour cette première partie, attention souvent plus laborieuse que prévue, je vous renvoie vers l’article que nous avons écrit à ce sujet:

Etape 2: obtenir la localisation des données dans le code source

Ici on va d’abord ouvrir la console, puis inspecter chacun des éléments désirés, afin d’obtenir la class pour chacun:

On peut synthétiser les class de nos éléments dans le fichier selectorlib suivant, qu’on appelera etabs.yml

Le code

Place au code!

Le code est également accessible juste là:

https://gist.github.com/lobstrio/ee81093ce2289a9bc75b23cd5d98bcbd

Donnez, do-do-donnez

Le script va donc réaliser les tâches suivantes

  • se lancer sur la page de recherche fournie
  • collecter les données des 10 premiers établissements

Pour exécuter le script, ouvrez votre éditeur Sublime Text 3, copier-coller le code ci contre, et enregistrez le sous le nom de google_maps_20210803_selenium.py

Dans votre commande, placez ensuite la ligne suivante :

Vous pourrez ensuite observer directement depuis votre console, le résultat suivant :

Et de **jolies données** proprement exploitables, au format csv:

Limitations connues

Le script permet de récolter les 10 premiers résultats d’un URL de recherche depuis http://google.com/maps. Toutefois, il sera impossible avec cet outil de passer à la page suivante, de récupérer les 20 résultats, ou de récupérer d’autres données que celles renseignées — contenu de la review, heures d’ouverture, points d’intérêt, images etc. Enfin, la collecte est pour le moins lente.

Aussi, 3 limitations principales identifiées:

  • données non exhaustives
  • attributs limitées
  • collecte lente

Si vous avez besoin d’aide pour scraper des milliers de données de façon récurrente et à grande échelle, ou si ces sets de données vous intéressent afin de mener à bien vos recherches, vous pouvez nous contacter juste là :

Avertissement: Tout code fourni dans nos tutoriels est destiné à des fins d’illustration et d’apprentissage uniquement. Nous ne sommes pas responsables de la façon dont il est utilisé et n’assumons aucune responsabilité pour toute utilisation préjudiciable du code source. La simple présence de ce code sur notre site n’implique pas que nous encourageons le scraping ou l’extraction de données des sites référencés dans le code et le tutoriel qui l’accompagne. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers web pour les sites internet populaires. Nous ne sommes pas obligés de fournir un support pour le code, cependant, si vous ajoutez vos questions dans la section des commentaires, nous pouvons vous y répondre périodiquement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *