add scrap data

This commit is contained in:
Tykayn 2024-06-10 11:23:51 +02:00 committed by tykayn
parent c2d315124b
commit 82fa1ead75
7 changed files with 40572 additions and 0 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
import requests
from bs4 import BeautifulSoup
# URL de la page principale
url = "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/index.html"
# Récupérer le contenu HTML de la page
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# Extraire les attributs des éléments "g" dans "g#departements"
departements_element = soup.find("div", id="container-map")
if departements_element:
dep_paths = departements_element.find_all("path")
for dep_path in dep_paths:
onclick = dep_path.get('onclick')

View File

@ -0,0 +1,70 @@
import json
import folium
# Charger les données depuis le fichier JSON
with open("elections_2024.json", "r") as f:
data = json.load(f)
# Charger les coordonnées des départements depuis le fichier GeoJSON
with open("departements.geojson", "r") as f:
departements_geo = json.load(f)
# Créer une carte centrée sur la France
m = folium.Map(location=[46.2276, 2.2137], zoom_start=6)
# Définir les couleurs pour le gradient
colors = ['#f2f0f7', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d']
# Calculer la valeur maximale de pourcentage_exprimes
max_percent_exprimes = max(float(value["pourcentage_exprimes"].replace(',', '.')) for departement, values in data.items() for value in values if value["parti"] == "PARTI PIRATE")
# Parcourir les départements et ajouter des polygones avec le gradient de couleur
for departement, values in data.items():
for value in values:
if value["parti"] == "PARTI PIRATE":
percent_exprimes = float(value["pourcentage_exprimes"].replace(',', '.'))
color_index = int((percent_exprimes / max_percent_exprimes) * (len(colors) - 1))
print(color_index)
color = colors[color_index]
for feature in departements_geo["features"]:
if feature["properties"]["code"] == departement:
# Ajouter le champ percent_exprimes à l'élément GeoJSON
feature["properties"]["percent_exprimes"] = percent_exprimes
folium.GeoJson(
feature,
name=f"Département {departement}",
style_function=lambda x: {
"fillColor": color,
"color": "black",
"weight": 1,
"fillOpacity": 0.7
},
tooltip=folium.features.GeoJsonTooltip(
fields=['nom', 'percent_exprimes'],
aliases=['Département:', 'Pourcentage:'],
style=f"background-color: {color};font-size: 1.5rem;",
localize=True,
sticky=False,
labels=True,
max_width=100,
direction='auto',
prefix='<b>',
suffix='</b>'
),
popup=folium.features.GeoJsonPopup(
fields=['percent_exprimes'],
aliases=['Pourcentage:'],
style="background-color: white; font-size: 1.5rem;",
localize=True,
sticky=False,
labels=True,
max_width=100,
direction='auto'
)
).add_to(m)
# Ajouter une légende
m.add_child(folium.LayerControl())
# Enregistrer la carte en HTML
m.save("france_map.html")

View File

@ -0,0 +1,182 @@
import time
import requests
from bs4 import BeautifulSoup
import json
import re
def get_departement_number(url):
pattern = re.compile(r"/ensemble_geographique/.+?/(\d+[A-Z]?)/")
match = pattern.search(url)
if match:
return match.group(1)
else:
return None
results = {}
# Liste des régions et départements
departements = [
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/94/2A/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/94/2B/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/13/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/84/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/83/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/04/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/06/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/93/05/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/48/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/03/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/30/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/11/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/34/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/66/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/15/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/43/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/63/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/65/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/64/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/40/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/33/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/24/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/47/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/46/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/09/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/32/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/31/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/82/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/12/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/76/81/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/01/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/38/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/74/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/42/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/69/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/73/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/07/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/84/26/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/17/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/19/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/23/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/87/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/86/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/16/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/75/79/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/53/22/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/52/85/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/28/50/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/53/56/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/53/29/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/53/35/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/52/44/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/52/49/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/52/72/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/52/53/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/28/14/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/28/61/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/28/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/89/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/70/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/28/76/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/28/27/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/37/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/45/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/36/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/41/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/24/18/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/21/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/58/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/71/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/39/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/51/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/32/60/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/32/62/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/32/59/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/32/02/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/32/80/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/08/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/10/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/52/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/68/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/67/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/54/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/77/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/55/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/57/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/44/88/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/91/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/78/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/95/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/93/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/75/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/92/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/94/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/25/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/27/90/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/93/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/92/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/94/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/11/75/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/01/971/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/02/972/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/03/973/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/04/974/index.html",
# "https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/06/976/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./975/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./988/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./987/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./986/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./ZX/index.html",
"https://www.resultats-elections.interieur.gouv.fr/europeennes2024/ensemble_geographique/./ZZ/index.html"
]
# Fonction pour récupérer les données d'une région
def get_region_data(url):
print('get region ', url)
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# Extraire les données du tableau
table = soup.find_all("div", {"class": "sie-table-layout-fixed"})
# print(table)
if table:
table_body = table[0].find("tbody")
rows = table_body.find_all("tr")
print(len(rows))
data = []
for row in rows:
cols = row.find_all("td")
print(len(cols))
if cols:
parti = cols[0].text.strip()
nuance = cols[1].text.strip()
voix = cols[2].text.strip()
pourcentage_inscrits = cols[3].text.strip()
pourcentage_exprimes = cols[4].text.strip()
print(parti, 'voix: ', voix)
data.append({
"parti": parti,
"nuance": nuance,
"voix": voix,
"pourcentage_inscrits": pourcentage_inscrits,
"pourcentage_exprimes": pourcentage_exprimes
})
return data
else:
print('pas de table de données trouvée')
return None
for url in departements:
departement_number = get_departement_number(url)
data_zone = get_region_data(url)
print(data_zone)
results[departement_number] = data_zone
# Enregistrer les résultats dans un fichier JSON
with open("elections_2024.json", "w") as f:
print(results)
json.dump(results, f, indent=4)