# bundeszentrale für politische bildung bietet RSS für veranstaltungen https://www.bpb.de/die-bpb/ueber-uns/service/rss/
# an anderer stelle kommt bei fehlen von RSS oder API, scraping in betrachtVon HTML zu CSV: Veranstaltungsinformationen sammeln
Veranstaltungsinformationen mit BeautifulSoup und Pandas extrahiert und aufbereitet.
Lernziele
- Lernen, wie man spezifische HTML-Elemente extrahiert. Anwendung von Selektoren zur gezielten Extraktion von Text aus HTML-Elementen wie
<h2 class="teaser__title">,<p class="teaser__subtitle">, usw. - Verstehen, wie man Informationen über Veranstaltungen in der politischen Bildung in Brandenburg sammelt und analysiert, um sie für weiterführende Projekte oder Studien zu nutzen.
# view-source:https://www.politische-bildung-brandenburg.de/veranstaltungen?page=2# prompt: bitte extrahiere alle article elemente aus dem html dokument und extrahiere den text der folgenden element in jedem article element : <h2 class="teaser__title">
# <p class="teaser__subtitle">
# <p class="teaser__meta">
# <p class="teaser__kicker">
# <p class="teaser__data">
import requests
from bs4 import BeautifulSoup
url = "https://www.politische-bildung-brandenburg.de/veranstaltungen"
extracted_data = []
for page in range(1, 10):
url = f"https://www.politische-bildung-brandenburg.de/veranstaltungen?page={page}"
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.content, "html.parser")
articles = soup.find_all("article")
for article in articles:
title = article.find("h2", class_="teaser__title")
subtitle = article.find("p", class_="teaser__subtitle")
meta = article.find("p", class_="teaser__meta")
date = article.find("p", class_="teaser__kicker")
location = article.find("p", class_="teaser__data") # corrected class name
extracted_data.append({
"title": title.text.strip() if title else None,
"subtitle": subtitle.text.strip() if subtitle else None,
"meta": meta.text.strip() if meta else None,
"date": date.text.strip() if date else None,
"location": location.text.strip() if location else None
})
print(url, len(articles))
if len(articles) == 0:
break
except requests.exceptions.RequestException as e:
print(f"An error occurred during the request: {e}")
except Exception as e:
print(f"An error occurred during processing: {e}")import pandas as pd
df = pd.DataFrame(extracted_data)df.to_csv("extracted_events.csv")pd.read_csv("extracted_events.csv", index_col=0)