updated readme
This commit is contained in:
247
README.md
247
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 <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/
|
||||
Reference in New Issue
Block a user