# 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: ```rust 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: ```bash 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 * **Chrome Browser** muss installiert sein. ### Build & Ausführung ```bash # Projekt klonen/erstellen git clone 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()`: ```rust 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.: ```json "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 1. **Initialisierung:** ChromeDriver starten, Browser-Session aufbauen 2. **Navigation:** Zielseite (`https://www.finanzen.net/termine/wirtschaftsdaten/`) aufrufen 3. **Overlay-Handling:** Störende Elemente (Cookie/Consent) entfernen oder umgehen 4. **Tab-Auswahl:** Hochwichtige Ereignisse (3 Sterne) auswählen 5. **Chunked Extraction:** * Datumsbereich in Blöcke aufteilen * JavaScript-basierte Datenextraktion * Automatische Paginierung / "Load more" 6. **Datenvalidierung:** Konsistenz- und Qualitätsprüfungen 7. **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:MM` Formatierung * **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) ```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** ```bash cargo add ``` **Debug-Modus** ```bash cargo run ``` **Release-Build** ```bash cargo build --release ``` **Tests ausführen** ```bash 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/