Comment récolter les @mails des Restaurants sur TripAdvisor avec Python 3 et Request

Arrêtez de copier le net. Scrapez le.

 

Comment récolter les @mails des Restaurants sur TripAdvisor avec Python 3 et Request

tripadvisor-scraping-mail-main

Lorsque l’on prospecte sur Tripadvisor.com (ou que l’on est un grand gourmand, qui sait), il peut être utile de récolter les adresses mails des établissements. Un petit mail, et un monde s’ouvre.

En utilisant Python, Requests, et lxml, nous allons développer un script de web-scraping simple et dynamique, qui permettra d’extraire, à partir d’une ville, les adresses mails des établissements concernés. A table !

Comment allons-nous procéder ?

Nous souhaitons extraire une donnée uniques (et laquelle !) : l’adresse email. Sur www.tripadvisor.com, cette donnée se trouve sur la page des restaurants en question, en bas de page.

tripadvisor-mail-python-scraping-p54uio1

Nous allons donc réaliser deux opérations successives : 

  • récupérer les URLs des restaurants depuis la page centrale
  • récupérer les adresses mails

Récupérer les URLs des restaurants

Sur www.tripadvisor.com, les URLs se trouvent sur la page centrale. Pour le bien de cette exercice, nous allons rendre hommage à notre capitale mondiale de la gastronomie, ville-lumière réputée pour son bon goût (et l’insolence de ses habitants) : Paris !

L’URL de départ est le suivant : https://www.tripadvisor.com/Restaurants-g187147-Paris_Ile_de_France.html

Et maintenant, un screenshot afin de visualiser la présence des éléments sur le site web :

tripadvisor-mail-python-scraping-p54uio2
La Cave aux Fouets, on retiendra le jeu de mots

Avant de commencer à construire le scraper, nous devons trouver où les données sont présentes dans les balises HTML de la page Web. Il faut connaître le fonctionnement des balises HTML de la page pour pouvoir faire ça.

Nous allons supposer que vous avez déjà des bases en HTML et que vous connaissez le langage Python. Vous n’avez pas besoin de plus de connaissances pour réaliser ce tutoriel.

Si vous ne connaissez ni le HTML, ni le CSS, ni le XPATH, ni le Python, prenez le temps de lire Premiers pas avec HTML – Mozilla Developer Network, Tutoriel CSS W3 School, XPath Tutorial – W3Schools,  et https://www.programiz.com/python-programming

Nous allons inspecter le code HTML de la page Web et localiser les données, en suivant la logique suivante :

  1. Inspecter l’élément
  2. Trouver la balise correspondante

Inspecter l’HTML

Ouvrez votre navigateur Chrome, et rendez-vous sur la page de l’ensemble des restaurants de Paris de www.tripadvisor.com, à l’adresse évoquée plus haut. Vous pouvez le faire avec d’autres navigateurs, mais ce tutoriel se fait sur Chrome, et facilitera votre apprentissage.

Faites, un clique droit, puis cliquer sur Inspecter.

tripadvisor-mail-python-scraping-p54uio3

Nous allons maintenant chercher le tag XPATH de chaque élément, avant de lancer notre scraper. Pour faciliter la recherche, cliquer sur le curseur en bas à gauche. Passez ensuite votre souris sur les éléments que nous avons cités en introduction.

En fouillant un peu, on remarque rapidement que le XPATH qui renvoie le prix sur le site est le suivant :

xpath = « //div[@class=’title’]/a/@href »

Installer Python, Request, et lxml

Pour installer Python et PIP, vous pouvez vous rendre sur le post que nous avons déjà fait à ce sujet : https://lobstr.io/index.php/2018/02/15/installer-librairies-python-mac-os/

Pour installer Requests, et les autres librairies utilisées dans le code, il suffit d’ouvrir votre commande, et de taper les lignes de code suivante :

Pour plus de renseignements sur Requests et ses fonctionnalités avec Python, leur documentation est fournie et très utile : http://docs.python-requests.org/en/master/

Récupérer les @mails avec un Regex

Afin de récupérer le mail, nous aurions pu utiliser la même méthode : repérer l’élément XPath au sein du code source, et aller le chercher en utilisant lxml.

Toutefois, puisque une adresse email possède toujours le même format, nous allons utiliser un outil puissant, et immédiat : le regex.

Une regular expression, regex, ou regexp est une séquence de caractères qui permet de définir un pattern de recherche. Ces patterns sont utilisés habituellement pour « trouver » ou « trouver et remplacer » des éléments au sein d’un texte : ici le code source de la page de notre restaurant.

tripadvisor-mail-python-scraping-p54uio4

Ici, nous allons utiliser la regex suivante : \w+\@\w+.\w+

Nous allons chercher : 

  • \w+ une première chaîne de caractères de taille non définie
  • \@  une arobase
  • \w+ une seconde chaîne de caractères de taille non définie
  • \. un point
  • \w+ la dernière chaîne de caractères 
tripadvisor-mail-python-scraping-p54uio5
Trouver un email dans une botte de foin

Le code

Pour exécuter le script, ouvrez votre éditeur Sublime Text 3, copier-coller le code ci contre, et enregistrez le sous le nom de tripadvisor_mail.py. Si vous ne savez pas comment l’installer, rendez-vous ici : https://lobstr.io/index.php/2018/02/08/comment-pourquoi-installer-sublim-text/

Dans votre commande, placez ensuite la ligne suivante :

Le premier argument correspond au nom de la ville, ici paris, le second au nombre de restaurants que l’on souhaite visiter afin d’en récolter les données, ici 20. Restons courtois.

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

tripadvisor-mail-python-scraping-p54uio6

Non vous ne rêvez pas. Une quinzaine de secondes et déjà 5 jolis mails, que vous pouvez exploiter. Avec l’accord de leur propriétaire, bien entendu.

Vous pouvez également télécharger le code sur notre Github, à l’adresse suivante : https://gist.github.com/Lobstrio/0729d2fe50e9ea4d38946a79a7db445a. N’hésitez pas à nous indiquer dans les commentaires, ou sur le github, si le script fonctionne bien chez vous aussi.

Limitations connues

De nombreuses limitation malheureusement, pour un script qui se veut avant tout éducatif. Le script permet de collecter des adresses emails par ville, mais impossible de spécifier le genre de restaurant, le prix, ou le score des restaurants en question. Par ailleurs, seules quelques villes sont disponibles.

Par ailleurs, les emails au format plus complexe, avec des tirets, ou des caractères spéciaux, ne seront pas pris en compte.

Si vous avez besoin d’aide pour scraper des milliers de données de façon récurrente et à grande échelle, vous pouvez nous contacter via le formulaire ci-dessous :

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 *