# 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 <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()`:

```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 <crate-name>
```

**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/