diff --git a/.gitignore b/.gitignore index 1b18dd6..655adc9 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,4 @@ target/ /target /chromedriver-win64/* -/economic_events.json \ No newline at end of file +/economic_events* \ No newline at end of file diff --git a/README.md b/README.md index 6b2252c..206e5fd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,249 @@ -# WebScraper +# 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/ \ No newline at end of file