# 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 betracht
Von 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
= "https://www.politische-bildung-brandenburg.de/veranstaltungen"
url
= []
extracted_data
for page in range(1, 10):
= f"https://www.politische-bildung-brandenburg.de/veranstaltungen?page={page}"
url try:
= requests.get(url)
response
response.raise_for_status()
= BeautifulSoup(response.content, "html.parser")
soup
= soup.find_all("article")
articles
for article in articles:
= article.find("h2", class_="teaser__title")
title = article.find("p", class_="teaser__subtitle")
subtitle = article.find("p", class_="teaser__meta")
meta = article.find("p", class_="teaser__kicker")
date = article.find("p", class_="teaser__data") # corrected class name
location
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
= pd.DataFrame(extracted_data) df
"extracted_events.csv") df.to_csv(
"extracted_events.csv", index_col=0) pd.read_csv(