54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
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
|
|
},
|
|
"geometry":{
|
|
"coordinates": [latitude,longitude],
|
|
"type":"Point"
|
|
}
|
|
}
|
|
|
|
antennes.append(antenne)
|
|
|
|
# Convertir la liste des antennes en un GeoDataFrame
|
|
gdf = gpd.GeoDataFrame(antennes)
|
|
|
|
# Exporter le GeoDataFrame au format GeoJSON
|
|
gdf.to_file("antennes_planning_familial.json", driver="GeoJSON") |