Scraping site Openstreetmap/Leaflet

Bonjour, je cherche à scrapper un listing provenant d’une carte sous Openstreetmap/Leaflet.
D’habitude j’utilise un logiciel pour scrapper mais la il ne me ressort rien.

Voici l’adresse du site : Qualifelec - IRVE

Avez-vous une solution pour ce type de requête?

Merci d’avance

2 « J'aime »

Bonjour,

voici les données au format JSON :

https://irve.qualifelec.fr/api/get-correspondant-informations-thotem.php?corresp_id=1098

Il suffit d’incrémenter le corresp_id (de 0 à xxxxxx je suppose) pour pouvoir récupérer toutes les fiches.

EDIT : encore mieux, il est possible de récupérer ici un fichier XML avec les données de toute la carte

3 « J'aime »

Super!
Le fichier xml ne comprend que quelques données par contre les données au format json sont ultra complète. Il faut maintenant que je trouve comment extraire toutes les données en automatique et pas à la main.

Salut, voici la liste des id existants ici, classés par ordre croissant. Malheureusement ils ne débutent pas à 0 & ne s’incrémentent pas de 1 à chaque fois.

Tu as ici les liens url directement avec les id, ce sera plus simple à crawler que de tester à l’aveugle des id. (si tu entres un id invalide, tu reçois tout de même un code http 200 et par défaut, tu tombes sur l’id 57677).

Exemple avec l’id 46570 qui n’existe pas : https://irve.qualifelec.fr/api/get-correspondant-informations-thotem.php?corresp_id=46570 tu tombes sur le json de l’id « par défaut » (l’id numéro 57677, qui est le dernier de la liste ordonnée).

2 « J'aime »

Top!
Je cherche à faire un script pour sortir les infos mais j’ai une erreur. J’ai crée un fichier scraper.py avec ce code qui se trouve dans mon dossier téléchargement.

from bs4 import BeautifulSoup
import re
import pandas as pd
import requests

Charger le fichier CSV contenant les adresses HTML

df = pd.read_csv(« C:/Users/sylva/Downloads/Liste_JSON.csv »)

Fonction pour extraire toutes les données encadrées par des guillemets doubles

def extract_all_data(url):
try:
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, « html.parser »)
# Utiliser une expression régulière pour extraire toutes les données entre guillemets doubles
data_text = " « .join(soup.stripped_strings) # Convertir tout le texte en une seule chaîne
extracted_data = re.findall(r’ »([^« ]*) »', data_text)
return extracted_data
else:
return None
except Exception as e:
print(f"Erreur lors de l’extraction des données pour {url}: {e}")
return None

Appliquer la fonction extract_all_data à chaque URL dans la colonne « adresse » du DataFrame

df[« extracted_data »] = df[« adresse »].apply(extract_all_data)

Diviser les données extraites en colonnes individuelles

extracted_data_df = pd.DataFrame(df[« extracted_data »].tolist())

Sauvegarder les données dans un fichier CSV

extracted_data_df.to_csv(« donnees_extraites.csv », index=False)

Erreur :
C:\Users\sylva\Downloads>python scraper.py
Traceback (most recent call last):
File « C:\Users\sylva\Downloads\scraper.py », line 7, in
df = pd.read_csv(« C:/Users/sylva/Downloads/Liste_JSON.csv »)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File « C:\Users\sylva\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pandas\io\parsers\readers.py », line 948, in read_csv
return _read(filepath_or_buffer, kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File « C:\Users\sylva\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pandas\io\parsers\readers.py », line 611, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File « C:\Users\sylva\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pandas\io\parsers\readers.py », line 1448, in init
self._engine = self._make_engine(f, self.engine)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File « C:\Users\sylva\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pandas\io\parsers\readers.py », line 1705, in _make_engine
self.handles = get_handle(
^^^^^^^^^^^
File « C:\Users\sylva\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pandas\io\common.py », line 863, in get_handle
handle = open(
^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ‹ C:/Users/sylva/Downloads/Liste_JSON.csv ›

C’est ici que ça coince :

Charger le fichier CSV contenant les adresses HTML

df = pd.read_csv(« C:/Users/sylva/Downloads/Liste_JSON.csv »)

le bot ne trouve pas ton fichier csv dans le dossier downloads

Pourtant il y est bien avec cet orthographe

Liste JSON != Liste_JSON :grin:

Salut, je suis sur mon téléphone, je regarderai en détail plus tard sur ordinateur mais il semble que tu aies mal orthographié le nom du fichier. Ton fichier ne contient pas d’underscore (le fameux « tiret du bas ») dans son nom, mais il semble que dans ton code tu écrives Liste_JSON. Ensuite, dans le code, tu écris .csv alors qu’il me semble que le fichier n’est pas au format CSV (si tu utilises le fichier que j’ai hébergé, ce n’est pas un csv). Je regarderai plus en détail dans quelques heures, mais ce sont les premières pistes :man_detective:t2:

Edit : le temps que j’écrive mon message tu as la réponse par Paul

Tiens, je te file :dart:ici:dart: une archive zip avec tous les fichiers json (il y en a 4641).
Si tu cherches à ne récupérer que certaines infos (par exemple seulement les adresses) je t’enverrai le script pour extraire les données que tu souhaites conserver & supprimer les autres.

1 « J'aime »

J’ai reussi à faire le script, c’est un peu le bazard dans mon fichier donc 2,3 réglages et cela sera impeccable!

Merci de l’aide :+1: