🚀 Bereit für Ihre digitale Transformation?
Vereinbaren Sie ein unverbindliches Strategiegespräch
📊 Business Value
Manuelles Durchsuchen von Ratsinformationssystemen ist zeitaufwändig und fehleranfällig. Dieser Crawler automatisiert den kompletten Prozess: Von der Seitenerkennung über JavaScript-Rendering bis zum strukturierten PDF-Download mit intelligenter Deduplizierung.
⚙️ Funktionsweise – Vierstufige Pipeline
Discovery
Crawler analysiert die Ratsinfo-Startseite, erkennt Paginierung und Wicket-basierte Navigation automatisch.
Rendering
Bei JavaScript-lastigen Seiten übernimmt Selenium mit Chrome Headless das Rendering. Cookie-Banner werden automatisch geschlossen.
PDF-Extraktion
Erkennt Wicket-Resource-Links, Anlagen und direkte PDF-Verweise. Validiert PDF-Signatur vor Download.
Strukturierte Ablage
PDFs werden mit Vorlagen-ID benannt in html/- und pdfs/-Ordnern abgelegt. JSON-Zusammenfassung aller Downloads.
💻 Technische Architektur
Der Crawler nutzt einen mehrstufigen Ansatz: Erst wird die direkte Wicket-AJAX-API angefragt, bei Misserfolg übernimmt Selenium das JavaScript-Rendering. BeautifulSoup parst alle HTML-Inhalte.
HerzogenrathCrawler. Modular, typisiert, erweiterbar.📝 Code-Snippets aus der Praxis
Session-Management mit realistischen Browser-Headers
def get_session(self):
session = requests.Session()
session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
'Accept': 'text/html,application/xhtml+xml,...',
'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8',
})
return session
PDF-Download mit Duplikatserkennung via MD5-Hash
def download_pdf(self, pdf_url, vorlage_id="unknown"):
content = self.session.get(pdf_url).content
if not content[:4] == b'%PDF': # PDF-Signatur prüfen
return False
content_hash = hashlib.md5(content).hexdigest()
if content_hash in self.pdf_hashes: # Duplikat?
return False
self.pdf_hashes.add(content_hash)
filename = f"pdfs/{vorlage_id}.pdf"
with open(filename, 'wb') as f:
f.write(content)
return True
Selenium mit Cookie-Banner-Handling im Headless-Mode
def get_page_content_selenium(self, url):
self.driver.get(url)
# Cookie-Banner automatisch schließen
try:
cookie_btn = WebDriverWait(self.driver, 2).until(
EC.element_to_be_clickable((By.ID, "cookieMessageBtn"))
)
cookie_btn.click()
except: pass
# Auf "Anzeigen"-Button für dynamische Inhalte warten
try:
search_button = self.driver.find_element(By.ID, "searchButton")
search_button.click()
time.sleep(2)
except: pass
return self.driver.page_source
🚀 In Tagen zum MVP — nicht in Monaten
🎯 Einsatzszenarien & strategische Perspektiven
Kommunale Transparenz
Automatisierte Archivierung aller Ratsvorlagen einer Kommune. Ideal für Journalisten, Bürgerinitiativen, politische Analyse.
Open Government Data maschinenlesbar machen.
Generalisierbarkeit
Die Crawler-Architektur ist nicht auf Herzogenrath beschränkt. Jedes Wicket-basierte Ratsinfo-System kann gecrawlt werden.
Einmal gebaut, vielfach eingesetzt.
Datenanalyse-Pipeline
Heruntergeladene Dokumente bilden die Basis für NLP-Analysen: Themenerkennung, Sentiment, Trendanalyse über Zeiträume.
Rohdaten sind der Treibstoff für KI.
KI-gestütztes Monitoring
Periodisches Crawling + LLM-basierte Zusammenfassungen = automatischer Monitoring-Dienst für kommunale Entwicklungen.
Von reaktiv zu proaktiv durch Automatisierung.
Eigenen Web-Crawler benötigt?
Ob Ratsinformationssysteme, Produktdaten, Preisvergleiche oder Dokumentenarchive – ich baue Ihren maßgeschneiderten Crawler. Python, Selenium, Playwright – was Ihre Zielseite braucht.