mapping-geojson-osm/etalab_data/planing_familial/scrap.py

54 lines
1.6 KiB
Python
Raw Normal View History

2024-10-17 18:19:34 +02:00
import json
import geopandas as gpd
from bs4 import BeautifulSoup
from shapely.geometry import Point
# Charger le fichier HTML
with open("liste.html", "r") as file:
html = file.read()
# Analyser le code HTML avec BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
# Trouver toutes les balises <article> qui contiennent les informations des antennes
articles = soup.find_all("article", class_="node node--type-hp-antenne node--view-mode-map-result")
# Liste pour stocker les données de chaque antenne
antennes = []
# Parcourir chaque article et extraire les informations
for article in articles:
titre = article.find("button", class_="nsb action-title").text.strip()
adresse = article.find("p", class_="address").text.strip()
# Gérer les articles qui n'ont pas de numéro de téléphone
telephone = ""
try:
telephone = article.find("p", class_="tel").text.strip()
except AttributeError:
pass
latitude = float(article["data-latlng"].split(",")[0].replace("[", "").replace('"', ""))
longitude = float(article["data-latlng"].split(",")[1].replace("]", "").replace('"', ""))
geometry = Point(longitude, latitude)
antenne = {
"type": "Feature",
"properties": {
"nom": titre,
"adresse": adresse,
"telephone": telephone
},
2024-10-17 18:21:55 +02:00
"geometry":{
"coordinates": [latitude,longitude],
"type":"Point"
}
2024-10-17 18:19:34 +02:00
}
antennes.append(antenne)
# Convertir la liste des antennes en un GeoDataFrame
gdf = gpd.GeoDataFrame(antennes)
# Exporter le GeoDataFrame au format GeoJSON
2024-10-17 18:21:55 +02:00
gdf.to_file("antennes_planning_familial.json", driver="GeoJSON")