cours-2023-2024 | Documents de mes cours pour l'année 2023-2024 | FX Jollois

Premiers éléments de collecte de données sur le web

Lecture du fichier de départ

Pour lire le fichier StockEtablissement, nous utilisons la librarie pandas

import pandas

sirene = pandas.read_csv("StockEtablissement_utf8_1000.csv", nrows = 10)
sirene

Le dataframe étant trop large, toutes les colonnes ne sont pas affichées. Pour avoir les colonnes contenant l’adresse, nous pouvons sélectionner celles-ci directement, comme ci-dessous par exemple

sirene[["siren", "siret", "numeroVoieEtablissement", "indiceRepetitionEtablissement",
       "typeVoieEtablissement", "libelleVoieEtablissement",
       "codePostalEtablissement", "libelleCommuneEtablissement",
       "libelleCommuneEtrangerEtablissement"]]

Pour stocker le résultat, il faut écrire dans un fichier (nous allons garder le format csv).

sirene.to_csv("export.csv", index = False)

Récupération de données de l’API Adresse

D’une adresse vers des coordonnées géographiques

A partir d’une adresse (par exemple, le 143 Avenue de Versailles, Paris), nous allons chercher les coordonnées géographiques de ce lieu.

Pour cela, nous avons besoin du package requests (généralement déjà présent).

import requests

adresse = "143+avenue+Versailles+paris"
url = "https://api-adresse.data.gouv.fr/search/"
recherche = url + "?q=" + adresse

reponse = requests.get(recherche)
reponse

Si le résultat est <Response [200]>, c’est que tout est OK. Sinon, se reporter à la liste des erreurs

On peut ensuite récupérer les résultats au format JSON

reponse.json()

Dans notre cas, il y a plusieurs résultats. Généralement, le premier est celui avec le score le plus élevé.

Web-scraping avec Python

Première étape : configurer le navigateur

Vous devez placer chromedriver dans le même répertoire que votre notebook

from selenium import webdriver

driver = webdriver.Chrome()

Création de l’URL à récupérer

base_url = "https://www.google.com/maps/search/"
place_info = "IUT+paris+rives+de+seine"
comp_url = "/@48.8489968,2.3125954,12z"

url = base_url + place_info + comp_url
url

Deuxième étape : récupération du contenu HTML

driver.get(url)
html = driver.page_source

Troisième étape : recherche de ce qui nous intéresse (ici la partie Informations)

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
results = soup.select("div[aria-label*='Informations']")
results
results = soup.select("a[aria-label*='Site Web']")
results

Pour avoir exactement l’adresse, on récupère le texte du premier résultat obtenu précédemment

results[0].text

Mais on peut aussi vouloir récupérer le lien web (dans href)

results[0]["href"]

Dernière étape : une fois qu’on a récupéré tout ce qu’on souhaite, on ferme correctement le navigateur

driver.close()