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
  • 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

  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)

{
  "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/

Description
No description provided
Readme MIT 10 MiB
Languages
Rust 97.5%
JavaScript 2.5%