Comment scraper les coordonnées sur PagesJaunes.fr avec Python 3 et Requests

Arrêtez de copier le net. Scrapez le.

 

Comment scraper les coordonnées sur PagesJaunes.fr avec Python 3 et Requests

pagesjaunes_main

Avec plus de 40 millions de visites mensuelles, d’après le site de suivi de fréquentation SimilarWeb,  le site français de référencement de professionnels PageJaunes.fr est un gisement particulièrement riche de données. Médecin, notaire, jardinier, restaurants… Il y en a pour tous les goûts ! Aujourd’hui, nous allons voir comment récupérer toutes les coordonnées d’une page donnée, grâce à Python et Requests.

Nous allons pour l’occasion nous intéresser à la page des (gentils) jardiniers de Marseille, le charme irrésistible des fleurs du Sud… Nous allons récupérer les données de cette liste (prénoms, noms, téléphones), avant d’enregistrer le tout dans un fichier CSV.

Quelle donnée allons nous extraire ?

Rendons-nous d’abord sur la page avec l’ensemble des Jardiniers de Marseille à extraire : https://www.pagesjaunes.fr/annuaire/marseille-13/jardinier. Voici les champs que nous allons extraire :

  1. Nom et prénom
  2. Numéro de téléphone

Et maintenant, un screenshot afin de visualiser la présence de chaque élément dans le site web :

pages-jaunes-python-scraping-p54uio1

D’aucuns diront qu’il faut appuyer sur un bouton pour afficher le numéro. Mais en réalité, celui-ci est déjà présent dans le code source, et c’est ce que nous allons voir dès maintenant.

Trouvez la donnée

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 Jardiniers marseillais des Pages Jaunes, à 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.

pages-jaunes-python-scraping-p54uio2

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.

On remarque d’abord que chaque élément est présent au sein d’un bloc HTML article > qui a pour @id, « bi-bloc-« , plus un nombre auquel on s’intéressera peu.

pages-jaunes-python-scraping-p54uio3

Par ailleurs, on note que nom et prénoms sont présents au sein du texte d’un élément HTML < a > qui a pour @class « denomination-links pj-lb pj-link », tandis que le numéro de téléphone est lui facilement repérable, et présent au sein d’un élément HTML < strong > qui a pour @class « num », dans l’attribut @title.

pages-jaunes-python-scraping-p54uio4
A utiliser avec parcimonie…

Voilà le XPATH, pour chaque bloc < article > :

  • article : //article[contains(@id, ‘bi-bloc-‘)]

Et au sein de chaque bloc < li > :

  • Nom et prénom : //a[@class=’denomination-links pj-lb pj-link’]/text()
  • Numéro de téléphone : //strong[@class=’num’]/@title

Comment configurer son ordinateur pour le Web Scraping

Nous allons utiliser Python 3 pour ce tutoriel. Pour commencer, vous avez besoin d’un ordinateur avec Python 3 et PIP installé dedans.

La plupart des systèmes d’exploitation UNIX comme Linux et Mac OS sont livrés avec Python déjà installé. Mais, tous les systèmes d’exploitation Linux ne sont pas livrés avec Python 3 par défaut.

Vérifions votre version de python. Ouvrez un terminal (sous Linux et Mac OS) ou Invite de commandes (sous Windows) et tapez

Si vous n’avez pas Python 3, il va falloir l’installer.

Installer Python et Request

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

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/

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 pagesjaunes_extract.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 :

Attention à bien spécifier les deux arguments : 

  • url : l’URL de la page à collecter
  • path : le chemin vers le dossier pour stocker le fichier .csv (path/to/youhou par exemple) 

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

pages-jaunes-python-scraping-p54uio5
méli-mélo de rouge-doré sur fond noir

Moins de 2 secondes pour se connecter à Page Jaunes, et en collecter toutes les données. C’est d’une grande rapidité…!

Vous devriez retrouver dans le même dossier que le dossier où se trouve le script, un fichier .csv, nommé extract.csv. Une fois ouvert, et formaté sur excel, vous obtiendrez un fichier .xls comme suit :

pages-jaunes-python-scraping-p54uio6

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

Limitations connues

Le script permet de collecter les données, et de les enregistrez au format .csv. Toutefois, vous ne pourrez récolter que les données de la page indiquée, tandis que d’autres données (adresse, prestations, certifications…) ne seront pas récoltées. Par ailleurs, à grande échelle, PagesJaunes vous posera des problèmes lors de la collecte (IP, Cookies, accès au serveur).

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 *