Scraping Open Street Map

Bonjour les GH,

Je me heurte à une problématique technique pour le scrap de données sur des cartes Open Street Maps.

Je m’explique…

  • de nombreux sites hébergent des cartes Open Street Map sur lesquelles figurent, par exemple, les adresses et les coordonnées de tous leurs bureaux en France ou dans le monde

  • Les données s’affichent sous la forme de bulles (points d’intérêt)…mais l’URL reste la même pour toutes les bulles

  • impossible (?) alors de scraper la liste des URLs pour ensuite récupérer les données

Je pense que ce sujet peut intéresser pas mal de GH non développeurs (comme moi). Alors si vous avez une astuce ou un conseil, je pense que plusieurs d’entre nous seront intéressés.

Merci et bon courage à tous dans le contexte covidesque actuel.

1 « J'aime »

Hello, j’espère que tu vas bien.

Il y a un petit truc qui cloche, rien que dans le titre de ton sujet… « Scraping Open Street Map », car en fait comme son nom l’indique Open Street Map, c’est de la data ouverte et libre, accessible gratuitement à tous via API.

Du coup, pourquoi vouloir faire du scraping d’un truc open ? :slight_smile:

https://wiki.openstreetmap.org/wiki/API_v0.6


https://nominatim.org/release-docs/develop/api/Search/

Salut @ScrapingExpert, merci pour ta réponse mais je crois qu’on ne s’est pas bien compris.

Alors voici un exemple pour que vous voyez de quoi il s’agit.

Voici une jolie carte avec de jolies données : https://www.centres-sociaux.fr/reseau/#decouvrirreseau

Comment, SI POSSIBLE SANS CODER, réussir à collecter l’ensemble des données de tous les points d’intérêts ?

Penses tu qu’on puisse le faire avec l’API et Gsheets ?

Hello @Jckrppr,

Mea culpa dans ce cas ! Je comprends mieux ton besoin maintenant.

En ce qui me concerne, je ne suis pas fan des soluces GSheets + API, car on tente de faire rentrer des données « non plates » (JSON), dans un format de données tabulaires.

Pour ne répondre qu’à moitié à ta question, sur la partie API pure, oui il y a pléthore de données à récupérer, comme on peut le voir ici:

Avec plein de belles adresses postales, de n° de téléphone, et d’adresses emails :slight_smile:

Je suis une « quiche » niveau « SANS CODER », peut être un autre membre pourrait te dire comment le faire sans une seule ligne de code.

UPDATE

Je viens de faire une trouvaille, qui devrait te plaire :slight_smile:

  1. Je t’invite à aller sur ce convertisseur de JSON to CSV:
    http://www.convertcsv.com/json-to-csv.htm

  2. Dans l’onglet « Enter Url », entres cette URL dans l’input texte: https://umap.openstreetmap.fr/fr/datalayer/939203/, puis cliques sur « Load URL »

  3. Résultats: tadaaaam

4 « J'aime »

Merci @ScrapingExpert. Je vais tester ta solution.

Sinon, pour les NO CODE, j’avais trouvé une solution (un peu barbare) également :

  • Aller sur la page qui héberge la carte OSM
  • Observer le code source pour détecter l’URL de la carte et l’ouvrir dans un nouvel onglet (on se retrouve donc avec la carte en plein écran)
  • Remplacer tous les paramètres de l’URL en « False » par « True » : permet d’avoir accès à toutes les fonctionnalités d’OSM dont l’export au format GEOJSON
  • Remplacer l’extension du fichier .GEOJSON téléchargé par .JSON
  • Ouvrir avec un éditeur de texte
  • BIM : Toutes les données sont là, en clair

Bonjour
Merci pour le tuto
Comment faites vous pour obtenir des URLS de ce genre :

https://umap.openstreetmap.fr/fr/datalayer/939203

Merci

une idée ?

Regarde le screenshot de @ScrapingExpert (en noir)

Une fois que tu es sur une map, il faut ouvrir la console développeur de chrome, aller dans « Network » puis « XHR » et tu rafraichis la page.

Tu verras les requêtes AJAX qui partent, dont celle qui va chercher les données.

2 « J'aime »

boom ca fonctionne ! merci ma poule

Merci à tous ! Ca m’a sauvé pour une framacarte x openstreetmap !

Salut à tous,

J’ai bien lu le topic et j’essaie de trouver l’url de cette carte interactive mais j’ai l’impression qu’elle est cachée ou alors c’est simplement moi qui suis mauvais.

Avez-vous une idée pour la trouver ?

J’ai bien suivi les étapes vu dans le screenshots mais je ne trouve pas l’id de la carte.

Voici le lien: Carte interactive et liste grottes de France - Fédération Française Tourisme Souterrain - Grottes de France

La carte est en bas

Hello @Manu-guidap

A priori, ici, tout est dans le code HTML — généré dès la première requête!

cf. l’utilisation de l’onglet Network de ton outil d’inspection depuis Chrome

Tu vas donc tout récupérer avec cette requête:

curl 'https://www.grottesdefrance.org/carte-et-liste-grottes-de-france/' \
  -H 'authority: www.grottesdefrance.org' \
  -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7' \
  -H 'accept-language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' \
  -H 'cache-control: max-age=0' \
  -H $'cookie: pll_language=fr; tarteaucitron=\u0021analytics=true; _ga=GA1.2.555774848.1689613402; _gid=GA1.2.188555259.1689613402; _gat=1; _ga_5B19SC2PWX=GS1.2.1689613401.1.0.1689613401.0.0.0' \
  -H 'referer: https://www.growthhacking.fr/' \
  -H 'sec-ch-ua: "Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: document' \
  -H 'sec-fetch-mode: navigate' \
  -H 'sec-fetch-site: cross-site' \
  -H 'sec-fetch-user: ?1' \
  -H 'upgrade-insecure-requests: 1' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' \
  --compressed

:sparkles:

1 « J'aime »

Merci @SashaLobstr

Je ne suis vraiment pas technique. Pour utiliser curl, on est d’accord qu’il faut installer un logiciel.
Je suis sur macbook et je n’arrive pas à le trouver

Si tu es sur mac, installe déjà https://brew.sh/
Tu cop col dans ton terminal
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Ensuite tu installes curl
brew install curl

PS : et homebrew est bourré de petits logiciels bien sympa

1 « J'aime »

Bonjour à tous,

J’ai également parcouru le topic mais j’ai également des difficultés pour suivre le process, notamment pour trouver l’url de la carte interactive. Je ne sais pas si c’est protégé ou autre (excusez-moi c’est peut être très basique mais je ne m’y connais absolument pas). Je serais très reconnaissant que quelqu’un m’aide ?

Ce lien de la carte : Réseau des points de collecte - OCA Bâtiment (oca-batiment.org)

Merci beaucoup

bonjour sde, je ne sais pas si quelqu’un t’a répondu, pour scraper cette carte, pas de protection, il faut utiliser les outils de dev (chrome, firefox …) et trouver la requete qui permet de récupérer les données de la carte. Dans le cas présent c’est une requete « POST », qui envoie des coordonnées lat/lon et récupère la liste des établissements sous forme json. Il est possible d’automatiser le process, mais çà va demander un peu de code, si çà t’intéresse je peux proposer une extraction des données, on peut en discuter en MP

Bonjour et merci DJousto,

Merci pour ta réponse. Je n’ai actuellement pas encore de solution à mon problème.
L’idée serait d’abord de faire une extraction unique, puis en fonction de la première analyse, automatiser le process ou non.
Peux-tu me contacter en mp (je n’ai pas trouvé comment te contacter en direct)?

Merci pour ton aide

Hello !

J’ai aussi des difficultés pour accéder à l’URL de mon OSM.

J’essaie d’obtenir toutes les infos de cette carte
https://passeport.ants.gouv.fr/services/geolocaliser-une-mairie-habilitee

Mais impossible d’accéder au JSON.
Savez-vous comment je peux m’en sortir ?

Merci

bonjour, quand tu tapes un code postal il y a une requete ajax qui renvoie un json, (avec les coordonnées et une distance en paramètres) et en retour tu as les données. Il est donc possible d’automatiser tout çà, mais je pense qu’il y a des solutions plus simples, il y a des bases de données opendata de toutes les mairies sur datagouv

Merci pour ton aide. Malheureusement ce sont uniquement les mairies équipées d’un dispositif de recueil (DR) qui m’intéressent, et c’est la seule carte qui les renseigne…
Je ne suis pas du tout initié au codage pour automatiser tout ça, comment puis-je faire ?