# RAG-Crawler ### Projekt-Zusammenfassung Der RAG-Crawler ist ein asynchroner, konfigurierbarer Web-Crawler, der entwickelt wurde, um Inhalte von Webseiten systematisch zu extrahieren und für die spätere Verwendung in RAG-Systemen (Retrieval-Augmented Generation) zu speichern. Er ist modular aufgebaut und bietet erweiterte Funktionen wie Zustandsverwaltung zum Pausieren und Fortsetzen, Duplikaterkennung zur Vermeidung redundanter Daten und inkrementelles Crawling, um nur geänderte Inhalte erneut zu verarbeiten. Die Konfiguration ermöglicht eine feingranulare Steuerung des Crawling-Verhaltens, des Loggings und der Datenbereinigung. ### Feature-Liste * **Asynchrones Crawling:** Nutzt `aiohttp` für performante, nicht-blockierende HTTP-Anfragen. * **Zustandsverwaltung:** Speichert den Fortschritt (URL-Warteschlange und besuchte Links) in einer Datei, um den Crawling-Prozess unterbrechen und später fortsetzen zu können. * **Duplikaterkennung:** Verwendet SimHash, um semantisch ähnliche Inhalte zu identifizieren und das Speichern von Duplikaten zu verhindern. * **Inkrementelles Crawling:** Führt eine SQLite-Datenbank mit den Hashes der Seiteninhalte, um nur Seiten zu verarbeiten, deren Inhalt sich seit dem letzten Crawl geändert hat. * **Konfigurierbare Crawling-Modi:** Unterstützt verschiedene Modi pro Start-URL: * `single_page`: Crawlt nur die angegebene Start-URL. * `domain_wide`: Crawlt die gesamte Domain, ausgehend von der Start-URL. * `path_limited`: Beschränkt das Crawling auf einen bestimmten URL-Pfad. * **HTML-Bereinigung:** Entfernt vor der Inhaltsextraktion unerwünschte HTML-Tags (z.B. Header, Footer) und Textmuster (z.B. "Datenschutz"), um die Datenqualität zu verbessern. * **`robots.txt`-Unterstützung:** Respektiert die in der `robots.txt` einer Webseite definierten Crawling-Regeln. * **Flexibles Logging:** Unterstützt das Logging in die Konsole, rotierende Log-Dateien sowie in SQLite- und MySQL-Datenbanken. * **Statistik-Tracking:** Erfasst detaillierte Statistiken für jeden Crawling-Vorgang (Dauer, besuchte Seiten, gespeicherte Datenmenge, Fehler). * **URL-Normalisierung:** Bereinigt URLs, indem Fragmente und gängige Tracking-Parameter entfernt werden, um die Effizienz der Duplikaterkennung zu erhöhen. ### Konfigurations-Tabelle (`config.json`) | Parameter | Beschreibung | Standardwert | | :--- | :--- | :--- | | `PAGE_LIMIT` | Die maximale Anzahl von Seiten, die pro Domain gecrawlt werden. | `400` | | `CRAWL_DELAY` | Die Verzögerung in Sekunden zwischen Anfragen an dieselbe Domain. | `2` | | `USER_AGENT` | Der User-Agent-String, der für HTTP-Anfragen verwendet wird. | `"Mozilla/5.0 ..."` | | `PATH_STRICT` | (Legacy) Wenn `true`, werden nur URLs gecrawlt, die mit einer der `start_urls` beginnen. | `false` | | `BLOCKED_PATTERNS` | URL-Muster, die vom Crawler ignoriert werden sollen. | `["/logout", "/auth", ...]` | | `MAX_RETRIES` | Maximale Anzahl von Wiederholungen für fehlgeschlagene HTTP-Anfragen. | `3` | | `RETRY_DELAY_BASE` | Basisverzögerung in Sekunden für exponentielles Backoff bei Wiederholungen. | `5` | | `MIN_CONTENT_LENGTH` | Minimale Länge des extrahierten Textes (in Zeichen), damit eine Seite gespeichert wird. | `500` | | `OUTPUT_DIR` | Das Verzeichnis, in dem die gecrawlten Daten als JSON-Dateien gespeichert werden. | `"/app/output"` | | `log` | Konfiguration für das Logging-System (Handler, Dateipfade, DB-Zugangsdaten). | `{...}` | | `html_cleaner` | Konfiguration zur Bereinigung von HTML (zu entfernende Tags und Textmuster). | `{...}` | | `priority_patterns` | URL-Pfade, die in der Crawling-Warteschlange priorisiert werden. | `["/docs/", "/wiki/", ...]` | | `duplicate_detection` | Aktiviert/deaktiviert die Duplikaterkennung und setzt den Ähnlichkeitsschwellenwert. | `{ "enable": true, ... }` | | `incremental_crawling` | Aktiviert/deaktiviert das inkrementelle Crawling und gibt den Pfad zur Hash-Datenbank an. | `{ "enable": true, ... }` | | `state_management` | Aktiviert/deaktiviert die Zustandsverwaltung und gibt den Namen der Zustandsdatei an. | `{ "enable": true, ... }` | ### Zweck der `url_list.json` Die Datei `url_list.json` dient als Eingabe für den Crawler und definiert die zu verarbeitenden "Quellen". Sie ist eine Liste von Objekten, wobei jedes Objekt eine Quelle mit einer oder mehreren `start_urls` und einem spezifischen `crawl_mode` (z.B. `single_page` oder `domain_wide`) repräsentiert. Dies ermöglicht es, mehrere Webseiten mit unterschiedlichen Crawling-Strategien in einem einzigen Durchlauf zu verarbeiten.