4.5 KiB
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
aiohttpfü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 derrobots.txteiner 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.