scripts/elections-scrapping/scrap.py

183 lines
15 KiB
Python

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)