From 10eaecfaf0befd1e7acf304283836cd25ee38f65 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 29 May 2025 18:04:10 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 47 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index c9f9fba0..81ab4a1b 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -2433,32 +2433,35 @@ def scrape_website_details(url): logger.warning(f"Ausführe 'scrape_website_details' fuer URL {url[:100]}...") # Logge den Start auf Warning + try: # <<< KORREKTE EINRÜCKUNG (auf gleicher Ebene wie logger.warning darüber) + # Hilfsfunktion zum Abrufen des Soup-Objekts mit Retry. + # Nutzt retry_on_failure, requests, BeautifulSoup, Config. + @retry_on_failure + def get_soup_for_details(target_url): + # --- START DES NEUEN/ERSETZTEN BLOCKS --- + if not target_url or not isinstance(target_url, str): # Zusätzliche Prüfung + logger.error(f"get_soup_for_details: Ungültige URL '{target_url}' erhalten.") + # Wirf direkt einen Fehler, der vom @retry_on_failure gefangen wird, falls es eine wiederholbare Ursache haben könnte, + # oder einen spezifischen ValueError, falls es ein permanentes Problem ist. + # Für eine ungültige URL-Struktur ist ValueError oft passender. + raise ValueError(f"Ungültige URL für get_soup_for_details: {target_url}") - try: - # Hilfsfunktion zum Abrufen des Soup-Objekts mit Retry. - # Nutzt retry_on_failure, requests, BeautifulSoup, Config. - @retry_on_failure - def get_soup_for_details(target_url): - # --- START DES NEUEN/ERSETZTEN BLOCKS --- - if not target_url or not isinstance(target_url, str): # Zusätzliche Prüfung - logger.error(f"get_soup_for_details: Ungültige URL '{target_url}' erhalten.") - raise ValueError("Ungültige URL für get_soup_for_details") # Damit retry greift oder als Fehler propagiert wird + if not target_url.lower().startswith(("http://", "https://")): + logger.debug(f"get_soup_for_details: Füge 'https://' zu URL '{target_url}' hinzu.") + target_url = "https://" + target_url + + # Der requests.get Call ist jetzt hier + response = requests.get(target_url, timeout=getattr(Config, 'REQUEST_TIMEOUT', 15), verify=True) + response.raise_for_status() # Wirft HTTPError für 4xx/5xx Antworten + response.encoding = response.apparent_encoding # Encoding erraten + return BeautifulSoup(response.text, getattr(Config, 'HTML_PARSER', 'html.parser')) # Parsen + # --- ENDE DES NEUEN/ERSETZTEN BLOCKS --- - if not target_url.lower().startswith(("http://", "https://")): - logger.debug(f"get_soup_for_details: Füge 'https://' zu URL '{target_url}' hinzu.") - target_url = "https://" + target_url - - response = requests.get(target_url, timeout=getattr(Config, 'REQUEST_TIMEOUT', 15), verify=True) - response.raise_for_status() - response.encoding = response.apparent_encoding - return BeautifulSoup(response.text, getattr(Config, 'HTML_PARSER', 'html.parser')) - # --- ENDE DES NEUEN/ERSETZTEN BLOCKS --- + # Rufen Sie die Hilfsfunktion auf, um das Soup-Objekt zu erhalten + soup = get_soup_for_details(url) # Der Aufruf von get_soup_for_details - # Rufen Sie die Hilfsfunktion auf, um das Soup-Objekt zu erhalten - soup = get_soup_for_details(url) - - # Wenn das Soup-Objekt erfolgreich erhalten wurde if soup: + # --- Extrahiere spezifische Details --- # Versuchen Sie, wichtige Meta-Informationen zu extrahieren. title = soup.find('title') # Titel-Tag