WebScraper — Wirtschaftskalender Datenextraktion
Ein leistungsstarker Web-Scraper in Rust, der hochwichtige Wirtschaftsereignisse von finanzen.net extrahiert und analysiert.
📋 Projektübersicht
Dieses Tool automatisiert die Extraktion von Wirtschaftsdaten aus dem Finanzen.net Wirtschaftskalender, mit besonderem Fokus auf hochwichtige Ereignisse (3 gelbe Sterne). Die extrahierten Daten werden in strukturiertem JSON-Format gespeichert und umfassen umfangreiche Metadaten für weitere Analysen.
✨ Hauptfunktionen
- Selektive Extraktion: Fokussiert ausschließlich auf hochwichtige Wirtschaftsereignisse (3 gelbe Sterne).
- Intelligentes Chunking: Automatische Aufteilung großer Datumsbereiche in handhabbare Blöcke.
- Robuste Datumsverarbeitung: Unterstützung für deutsche und internationale Datumsformate.
- Datenkonsistenzprüfung: Umfassende Validierung der extrahierten Daten.
- Duplikaterkennung: Automatische Erkennung und Entfernung doppelter Einträge.
- Graceful Shutdown: Elegante Behandlung von Abbruchsignalen (Ctrl+C).
- Echtzeit-Export: Parallele Speicherung von Zwischen- und Endergebnissen.
🛠 Technischer Stack
- Programmiersprache: Rust
- Web Automation: Fantoccini (WebDriver Client)
- Datum/Zeit: Chrono
- JSON-Verarbeitung: Serde, serde_json
- Asynchrone Verarbeitung: Tokio
- Browser-Treiber: ChromeDriver
📁 Projektstruktur
WebScraper/
├── src/
│ └── main.rs # Hauptanwendungslogik
├── chromedriver-win64/ # ChromeDriver Binary
├── Cargo.toml # Rust Abhängigkeiten
├──
├──
├── Cargo.lock # Versionssperren
├── countries.json # Länderreferenzdaten
├── continents.json # Kontinentreferenzdaten
└── README.md # Diese Datei
📊 Datenmodell
Extrahiert werden EconomicEvent-Strukturen mit folgenden Feldern:
struct EconomicEvent {
country: String, // Herkunftsland
date: String, // Datum (ISO-Format)
time: String, // Uhrzeit
event: String, // Ereignisname
actual: String, // Tatsächlicher Wert
forecast: String, // Prognosewert
previous: String, // Vorheriger Wert
importance: String, // Wichtigkeit (z. B. "High")
description: String // Beschreibung
}
🚀 Installation & Einrichtung
Voraussetzungen
- Rust Toolchain installieren:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh
-
ChromeDriver herunterladen:
- Webseite:
https://chromedriver.storage.googleapis.com/index.html - Oder:
https://googlechromelabs.github.io/chrome-for-testing/ - Entpacke in
chromedriver-win64/Verzeichnis
- Webseite:
-
Chrome Browser muss installiert sein.
Build & Ausführung
# Projekt klonen/erstellen
git clone <repository-url>
cd WebScraper
# Abhängigkeiten herunterladen
cargo fetch
# Projekt kompilieren und ausführen
cargo run --release
⚙️ Konfiguration
Datumsbereich
Standardmäßig extrahiert der Scraper Daten zwischen konfigurierbaren Grenzen. Beispiel-Aufruf in main():
let events = scrape_all_events_with_chunking(&client, "2007-02-13", "2025-12-01").await?;
Chrome-Optionen
Chrome-Verhalten kann in den Capabilities angepasst werden, z. B.:
"args": [
"--disable-gpu",
"--disable-notifications",
"--disable-popup-blocking",
"--disable-blink-features=AutomationControlled"
]
Hinweis: Für Headless- oder Headful-Ausführung kann das
--headless-Flag je nach Use Case hinzugefügt oder entfernt werden.
📈 Ausführungsablauf
-
Initialisierung: ChromeDriver starten, Browser-Session aufbauen
-
Navigation: Zielseite (
https://www.finanzen.net/termine/wirtschaftsdaten/) aufrufen -
Overlay-Handling: Störende Elemente (Cookie/Consent) entfernen oder umgehen
-
Tab-Auswahl: Hochwichtige Ereignisse (3 Sterne) auswählen
-
Chunked Extraction:
- Datumsbereich in Blöcke aufteilen
- JavaScript-basierte Datenextraktion
- Automatische Paginierung / "Load more"
-
Datenvalidierung: Konsistenz- und Qualitätsprüfungen
-
Export: JSON-Dateien mit Zeitstempel generieren
🔍 Datenqualitätsprüfungen
Der Scraper führt folgende Prüfungen durch:
- Duplikaterkennung: Identische Events werden entfernt
- Zeitformat-Validierung: Korrekte
HH:MMFormatierung - Datumsbereichsprüfung: Extrahierte Events liegen im Zielzeitraum
- Vollständigkeitscheck: Kritische Felder müssen vorhanden sein
- Beschreibungsabdeckung: Prüft, ob Beschreibungen für Events vorhanden sind
- Länder-/Monatsverteilung: Statistische Auswertung
📤 Ausgabeformate
Hauptexport
economic_events_YYYYMMDD_HHMMSS_combined.json— Vollständiger Datensatz
Chunk-Exporte
economic_events_YYYYMMDD_HHMMSS_chunk_X.json— Zwischenstände pro Block
Beispiel-Eintrag (JSON)
{
"country": "USA",
"date": "2024-01-15",
"time": "14:30",
"event": "Verbraucherpreisindex (CPI)",
"actual": "3.4%",
"forecast": "3.2%",
"previous": "3.1%",
"importance": "High",
"description": "Monatliche Inflationsdaten für die USA"
}
🛡️ Fehlerbehandlung
- Automatische Wiederholung: Bei fehlgeschlagenen Extraktionen
- Graceful Degradation: Fallback-Logiken für Datumsparsing
- Timeout-Management: Angemessene Wartezeiten zwischen Interaktionen
- Ressourcenbereinigung: Korrektes Schließen von Browser und Treiber
📊 Leistungsmerkmale
- Parallelverarbeitung: Asynchrone Operationen mit Tokio
- Speichereffizienz: Chunk-basierte Verarbeitung großer Datensätze
- Netzwerkoptimierung: Intelligente Delays zwischen Requests
- Robustheit: Widerstandsfähig gegen Seitenänderungen
🔧 Entwicklung
Abhängigkeiten hinzufügen
cargo add <crate-name>
Debug-Modus
cargo run
Release-Build
cargo build --release
Tests ausführen
cargo test
🌐 Länderabdeckung
Der Scraper unterstützt 52 Länder und Regionen (siehe countries.json), darunter:
- USA, China, Deutschland, Japan, UK
- Eurozone, Schweiz, Kanada, Australien
- und viele weitere wichtige Volkswirtschaften
chromedriver Download
https://chromedriver.storage.googleapis.com/index.html https://googlechromelabs.github.io/chrome-for-testing/