Skip to content

Instantly share code, notes, and snippets.

@dewomser
Created December 11, 2025 22:57
Show Gist options
  • Select an option

  • Save dewomser/d0ae9f2ec1a6c6b697299058ae95cab8 to your computer and use it in GitHub Desktop.

Select an option

Save dewomser/d0ae9f2ec1a6c6b697299058ae95cab8 to your computer and use it in GitHub Desktop.
AFD Politiker und Funktionen aus Worms von der Webseite gekratzt im JSON Format
[
{
"name": "Frank Kienitz",
"functions": [
"Mitglied der AfD seit 2023",
"Mitglied im AfD Kreisvorstand seit 2024",
"Mitglied im Stadtrat",
"Mitglied im Stadtrat Worms seit 2023"
]
},
{
"name": "Gabi Lehmann",
"functions": [
"Mitglied im Stadtrat",
"Mitglied im Stadtrat Worms seit 2024",
"Parteiloses Fraktionsmitglied"
]
},
{
"name": "Heribert Friedmann",
"functions": [
"Fraktionsvorsitzender",
"Mitglied der AfD Worms seit 2013",
"Mitglied des Landtages von 2016 – 2021",
"Mitglied im Landesvorstand der AfD von 2015 – 2020",
"Mitglied im Stadtrat Worms seit 2019"
]
},
{
"name": "Jörg Machauer",
"functions": [
"Mitglied im Stadtrat",
"Mitglied im Stadtrat Worms seit 2024",
"Mitglied in der AfD seit 2023"
]
},
{
"name": "Lutz Hasselwander",
"functions": [
"Mitglied Kreisvorstand  Pirmasens (3 Jahre)",
"Mitglied der AfD seit 2016",
"Mitglied im Kreisvorstand Worms seit 2019",
"Mitglied im Stadtrat",
"Mitglied im Stadtrat Worms seit 2019"
]
},
{
"name": "Matthias Geithner",
"functions": [
"Fraktionsgeschäftsführer",
"Mitglied der AfD seit 2023",
"Mitglied im AfD Kreisvorstand Worms seit 2024",
"Mitglied im Stadtrat Worms seit 2024"
]
},
{
"name": "Thorsten Endreß",
"functions": [
"Mitglied der AfD seit 2018",
"Mitglied im AfD Kreisvorstand Worms seit 2024",
"Mitglied im Stadtrat Worms seit 2024",
"Stellv. Fraktionsvorsitzender"
]
}
]
import subprocess
from bs4 import BeautifulSoup
import json
def fetch_html_with_curl(url):
"""
Ruft den HTML-Inhalt von einer gegebenen URL mit curl ab.
"""
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
result = subprocess.run(
['curl', '-A', headers['User-Agent'], '-L', url],
capture_output=True,
text=True,
check=True
)
return result.stdout
except (subprocess.CalledProcessError, FileNotFoundError) as e:
print(f"Fehler beim Abrufen von {url} mit curl: {e}")
return None
def parse_afd_fraktion(html_content):
"""
Parst die HTML-Inhalte der AfD-Fraktions-Seite.
"""
if not html_content:
return []
soup = BeautifulSoup(html_content, 'html.parser')
politicians = []
# Jeder Fraktionsmitglied ist in einem 'eut-column-inner' div.
# Wir wählen diese Spalten aus, um die Informationen zu extrahieren.
member_columns = soup.select('.eut-column-inner.wpb_column.eut-column-1-3')
for column in member_columns:
name_tag = column.select_one('h3.eut-title span')
role_tag = column.select_one('h4.eut-link-text span')
if not name_tag:
continue
name = name_tag.get_text(strip=True)
functions = []
if role_tag:
role = role_tag.get_text(strip=True)
if role:
functions.append(role)
# Extrahieren des politischen Werdegangs
werdegang_div = column.select_one('.eut-text')
if werdegang_div:
list_items = werdegang_div.select('ul li')
for item in list_items:
# Fügt den bereinigten Text des Listenelements hinzu
item_text = item.get_text(strip=True)
if item_text:
functions.append(item_text)
if name:
# Entferne Duplikate in den Funktionen und sortiere sie
unique_functions = sorted(list(set(functions)))
politicians.append({"name": name, "functions": unique_functions})
return sorted(politicians, key=lambda x: x["name"])
def main():
"""
Hauptfunktion des Skripts.
"""
fraktion_url = "https://www.afd-worms.de/fraktion/"
output_filename = "afd_politiker_worms.json"
print(f"Rufe HTML von {fraktion_url} ab...")
html_content = fetch_html_with_curl(fraktion_url)
if not html_content:
print("Konnte die Webseite nicht abrufen. Das Skript wird beendet.")
return
print("Parse Fraktions-Daten...")
fraktion_data = parse_afd_fraktion(html_content)
# Schreibe die Daten in eine JSON-Datei
try:
with open(output_filename, 'w', encoding='utf-8') as f:
json.dump(fraktion_data, f, ensure_ascii=False, indent=2)
print(f"Erfolgreich {output_filename} erstellt.")
except IOError as e:
print(f"Fehler beim Schreiben der Datei {output_filename}: {e}")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment