wikipedia_scraper.py aktualisiert

This commit is contained in:
2025-07-19 19:03:02 +00:00
parent 96cc188262
commit 0441ba2d17

View File

@@ -179,11 +179,10 @@ class WikipediaScraper:
self.logger.log(log_level, f" => Artikel '{page.title[:100]}...' {'VALIDIERT' if is_valid else 'NICHT validiert'} (Grund: {reason})")
return is_valid
def search_company_article(self, company_name, website=None, max_recursion_depth=1):
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, wenn ein relevanter und validierter
Artikel gefunden wird. Behandelt explizit Begriffsklaerungsseiten.
wikipedia.WikipediaPage Objekt zurueck. Berücksichtigt nun auch den parent_name.
"""
if not company_name or str(company_name).strip() == "":
self.logger.warning("Wikipedia search skipped: No company name provided.")
@@ -198,9 +197,12 @@ class WikipediaScraper:
processed_titles = set()
original_search_name_norm = normalize_company_name(company_name)
def check_page_recursive(title_to_check, current_depth):
if title_to_check in processed_titles or current_depth > max_recursion_depth:
# KORRIGIERT: parent_name wird nun an die innere Funktion übergeben
def check_page_recursive(title_to_check, current_depth, parent_name_for_validation):
# 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
processed_titles.add(title_to_check)
@@ -216,18 +218,18 @@ class WikipediaScraper:
page = None
try:
page = wikipedia.page(title_to_check, auto_suggest=False, preload=False, redirect=True)
if self._validate_article(page, company_name, website):
# KORRIGIERT: parent_name wird an die Validierung übergeben
if self._validate_article(page, company_name, website, parent_name_for_validation):
self.logger.info(f" -> Titel '{page.title[:100]}...' erfolgreich validiert!")
return page
else:
return None
# NEU: Fängt den "Page id ... does not match" Fehler gezielt ab
except wikipedia.exceptions.PageError:
self.logger.debug(f" -> Artikel '{title_to_check[:100]}' nicht gefunden (PageError).")
return None
except wikipedia.exceptions.DisambiguationError as e_disamb:
self.logger.info(f" -> Begriffsklaerung '{e_disamb.title}' gefunden (Tiefe {current_depth}). Pruefe Optionen...")
if current_depth >= max_recursion_depth: return None
if current_depth >= effective_max_depth: return None
relevant_options = []
for option in e_disamb.options:
@@ -237,7 +239,8 @@ class WikipediaScraper:
relevant_options.append(option)
for option_to_check in relevant_options[:3]:
validated_page = check_page_recursive(option_to_check, current_depth + 1)
# KORRIGIERT: parent_name wird im rekursiven Aufruf weitergereicht
validated_page = check_page_recursive(option_to_check, current_depth + 1, parent_name_for_validation)
if validated_page: return validated_page
return None
except Exception as e_page:
@@ -250,14 +253,16 @@ class WikipediaScraper:
# Hauptlogik der Suche
self.logger.debug(f" -> Versuche direkten Match fuer '{company_name[:100]}...'")
page_found = check_page_recursive(company_name, 0)
# KORRIGIERT: parent_name wird an den ersten Aufruf übergeben
page_found = check_page_recursive(company_name, 0, parent_name)
if page_found: return page_found
self.logger.debug(f" -> Kein direkter Treffer. Starte Suche mit generierten Begriffen...")
for term in search_terms:
if term == company_name: continue
self.logger.debug(f" -> Versuche Suchbegriff: '{term[:100]}...'")
page_found = check_page_recursive(term, 0)
# KORRIGIERT: parent_name wird an die weiteren Aufrufe übergeben
page_found = check_page_recursive(term, 0, parent_name)
if page_found: return page_found
self.logger.warning(f"Kein passender & validierter Wikipedia-Artikel fuer '{company_name[:100]}...' gefunden.")