Scraping page jaune
mamiemando Messages postés 33410 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 2 décembre 2024 - 24 juil. 2024 à 16:05
- Pages jaunes
- Supprimer une page word - Guide
- Traduire une page - Guide
- Word numéro de page 1/2 - Guide
- Mettre google en page d'accueil - Guide
1 réponse
Modifié le 24 juil. 2024 à 16:21
Bonjour,
Préliminaires
Avant d'envisager du scrapping, il vaut souvent mieux regarder si le site met une API à disposition. L'avantage, c'est que le ton script restera valide même si la mise en forme du site des pages jaunes évolue. C'est d'autant plus important dans ton cas que si tu veux récupérer des milliers de contacts, ils seront probablement affichés sur plusieurs pages sur le site normal, ce qui rendra le script de scrapping d'autant plus compliqué à écrire.
Ça tombe bien, le site des pages jaunes propose une API utilisable sous ces conditions. Au bas de cette page, tu peux demander un accès (qui à terme, se présentera sous la forme d'un token). Une fois l'accès à l'API demandé, tu peux notamment utiliser la "Find Business API".
Exemple : Dans ton cas, pour chercher les pizzerias à Paris, on peut (sous réserve d'avoir un token) récupérer les résultats via : https://api.pagesjaunes.fr/v1/pros/search?what=pizzeria&where=paris
Implémentation
Pour envoyer une telle requête https en python, le plus simple consiste à utiliser le module requests. Celui-ci s'installe via PIP :
pip install requests
Cet exemple montre comment utiliser requests avec un token. Si tu parviens à l'adapter à ton cas d'usage, tu récupéreras en réponse une chaîne au format JSON et tu pourras facilement la convertir en dictionnaire avec le module json.
Exemple sur une autre API (sans token)
Voici comment convertir un résultat d'API json en un dictionnaire.
import requests import json from pprint import pprint api_url = "https://api.archives-ouvertes.fr/search/" query = "?fq=authFullName_s:(Dupont)&wt=json" token = "MY TOKEN" headers = { "Authorization": f"access_token {token}" } response = requests.get(api_url + query, headers=headers) data = json.loads(response.text)["response"] pprint(data)
Note que dans cet exemple, j'ai laissé à titre indicatif le token (qui est ignoré par l'API). Cependant, sur une API qui en attend, la manière dont on le passe dépend du site web (et normalement, est documentée) :
- La clé est généralement "Authorization",
- Le préfixe (ici "access_token") dépend de l'API.
Bonne chance