diff --git a/data_processor.py b/data_processor.py index 4611d98b..53d8c1c8 100644 --- a/data_processor.py +++ b/data_processor.py @@ -1984,22 +1984,25 @@ class DataProcessor: self.logger.info( f"Wikipedia-Verifizierungs-Batch abgeschlossen. {processed_count} Zeilen verarbeitet (in Batch aufgenommen), {skipped_count} Zeilen uebersprungen ({skipped_no_wiki_url} wegen fehlender M-URL).") # <<< GEÄNDERT - def _scrape_raw_text_task(self, task_info, scrape_function): + def _scrape_website_task(self, task_info): """ - Worker-Funktion für das parallele Scrapen. - Passt sich an, um sowohl Rohtext als auch Meta-Details zu liefern. + Worker-Funktion für das parallele Scrapen von Websites. + Ruft die "gehärteten" Helper-Funktionen auf und gibt IMMER ein Dictionary zurück. """ url = task_info.get('url') row_num = task_info.get('row_num') self.logger.debug(f" -> Scrape Task gestartet für Zeile {row_num}: {url}") - try: - # Wir rufen jetzt zwei Helper-Funktionen auf - raw_text = get_website_raw(url) - meta_details = scrape_website_details(url) - return {'row_num': row_num, 'raw_text': raw_text, 'meta_details': meta_details, 'error': None} - except Exception as e: - self.logger.error(f"Fehler im Scraping Worker für Zeile {row_num}: {e}") - return {'row_num': row_num, 'raw_text': f'k.A. (Fehler: {e})', 'meta_details': 'k.A.', 'error': True} + + # Rufe die gehärteten Helper-Funktionen auf. + # Diese geben garantiert immer einen String zurück. + raw_text_result = get_website_raw(url) + meta_details_result = scrape_website_details(url) + + # Gib immer ein Dictionary zurück, um den AttributeError im Hauptthread zu vermeiden. + return { + 'raw_text': raw_text_result, + 'meta_details': meta_details_result + } def process_website_scraping( self,