diff --git a/wikipedia_scraper.py b/wikipedia_scraper.py index 80fa80ec..256796c4 100644 --- a/wikipedia_scraper.py +++ b/wikipedia_scraper.py @@ -212,12 +212,12 @@ class WikipediaScraper: def search_company_article(self, company_name, website=None, parent_name=None, max_recursion_depth=1): """ - Sucht einen passenden Wikipedia-Artikel fuer das Unternehmen und gibt das - wikipedia.WikipediaPage Objekt zurueck. Berücksichtigt nun auch den parent_name. + Sucht einen passenden Wikipedia-Artikel. Finale Version mit korrekter + Parameter-Weitergabe an die innere rekursive Funktion. """ if not company_name or str(company_name).strip() == "": self.logger.warning("Wikipedia search skipped: No company name provided.") - raise ValueError("Kein Firmenname fuer Wikipedia Suche angegeben.") + return None search_terms = self._generate_search_terms(company_name, website) if not search_terms: @@ -229,9 +229,8 @@ class WikipediaScraper: processed_titles = set() original_search_name_norm = normalize_company_name(company_name) - # KORRIGIERT: parent_name wird nun an die innere Funktion übergeben + # Die innere Funktion erbt `parent_name` aus dem Scope der äußeren Funktion. def check_page_recursive(title_to_check, current_depth): - # KORRIGIERT: Sicherer Vergleich, falls max_recursion_depth None sein sollte effective_max_depth = max_recursion_depth if max_recursion_depth is not None else 2 if title_to_check in processed_titles or current_depth > effective_max_depth: return None @@ -249,7 +248,7 @@ class WikipediaScraper: page = None try: page = wikipedia.page(title_to_check, auto_suggest=False, preload=False, redirect=True) - # KORRIGIERT: parent_name wird an die Validierung übergeben + # KORRIGIERTER AUFRUF: Übergibt jetzt 5 Argumente, wie von _validate_article erwartet. if self._validate_article(page, company_name, website, parent_name): self.logger.info(f" -> Titel '{page.title[:100]}...' erfolgreich validiert!") return page @@ -270,29 +269,19 @@ class WikipediaScraper: relevant_options.append(option) for option_to_check in relevant_options[:3]: - # KORRIGIERT: parent_name wird im rekursiven Aufruf weitergereicht + # Der rekursive Aufruf ist korrekt und einfach. validated_page = check_page_recursive(option_to_check, current_depth + 1) if validated_page: return validated_page return None except Exception as e_page: title_for_log = page.title[:100] if page and hasattr(page, 'title') and page.title else title_to_check[:100] - if "extlinks" in str(e_page).lower(): - self.logger.warning(f" -> KeyError ('extlinks') beim Verarbeiten von Titel '{title_for_log}...'. Übersprungen.") - else: - self.logger.error(f" -> Unerwarteter Fehler bei Verarbeitung von Seite '{title_for_log}': {e_page}") + self.logger.error(f" -> Unerwarteter Fehler bei Verarbeitung von Seite '{title_for_log}': {e_page}") return None -# Hauptlogik der Suche - # Die innere Funktion `check_page_recursive` erbt `parent_name` jetzt aus dem äußeren Scope. - # Daher muss der Parameter hier nicht mehr übergeben werden. - - # Iteriere durch alle generierten Suchbegriffe, inklusive des Originalnamens + # Hauptlogik der Suche for term in search_terms: - self.logger.debug(f" -> Versuche Suchbegriff: '{term[:100]}...'") page_found = check_page_recursive(term, 0) - if page_found: - return page_found - + if page_found: return page_found self.logger.warning(f"Kein passender & validierter Wikipedia-Artikel fuer '{company_name[:100]}...' gefunden.") return None