bugfix
This commit is contained in:
@@ -2433,9 +2433,8 @@ def scrape_website_details(url):
|
|||||||
|
|
||||||
logger.warning(f"Ausführe 'scrape_website_details' fuer URL {url[:100]}...") # Logge den Start auf Warning
|
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)
|
try: # Beginn des try-Blocks
|
||||||
# Hilfsfunktion zum Abrufen des Soup-Objekts mit Retry.
|
# Hilfsfunktion zum Abrufen des Soup-Objekts mit Retry.
|
||||||
# Nutzt retry_on_failure, requests, BeautifulSoup, Config.
|
|
||||||
@retry_on_failure
|
@retry_on_failure
|
||||||
def get_soup_for_details(target_url):
|
def get_soup_for_details(target_url):
|
||||||
if not target_url or not isinstance(target_url, str):
|
if not target_url or not isinstance(target_url, str):
|
||||||
@@ -2444,59 +2443,46 @@ def scrape_website_details(url):
|
|||||||
|
|
||||||
if not target_url.lower().startswith(("http://", "https://")):
|
if not target_url.lower().startswith(("http://", "https://")):
|
||||||
logger.debug(f"get_soup_for_details: Füge 'https://' zu URL '{target_url}' hinzu.")
|
logger.debug(f"get_soup_for_details: Füge 'https://' zu URL '{target_url}' hinzu.")
|
||||||
target_url = "https://" + target_url # Schema hinzufügen
|
target_url = "https://" + target_url
|
||||||
|
|
||||||
response = requests.get(target_url, timeout=getattr(Config, 'REQUEST_TIMEOUT', 15), verify=True)
|
response = requests.get(target_url, timeout=getattr(Config, 'REQUEST_TIMEOUT', 15), verify=True)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
response.encoding = response.apparent_encoding
|
response.encoding = response.apparent_encoding
|
||||||
return BeautifulSoup(response.text, getattr(Config, 'HTML_PARSER', 'html.parser'))
|
return BeautifulSoup(response.text, getattr(Config, 'HTML_PARSER', 'html.parser'))
|
||||||
# --- ENDE DES NEUEN/ERSETZTEN BLOCKS ---
|
# Ende der Definition von get_soup_for_details
|
||||||
|
|
||||||
# Rufen Sie die Hilfsfunktion auf, um das Soup-Objekt zu erhalten
|
# Rufen Sie die Hilfsfunktion auf, um das Soup-Objekt zu erhalten
|
||||||
soup = get_soup_for_details(url) # Der Aufruf von get_soup_for_details
|
# Diese Zeile muss auf derselben Einrückungsebene wie die @retry_on_failure Zeile sein,
|
||||||
|
# da sie die nächste Anweisung innerhalb des try-Blocks nach der Funktionsdefinition ist.
|
||||||
if soup:
|
soup = get_soup_for_details(url) # Korrekte Einrückung (innerhalb des try-Blocks)
|
||||||
|
|
||||||
|
if soup: # Korrekte Einrückung (innerhalb des try-Blocks)
|
||||||
# --- Extrahiere spezifische Details ---
|
# --- Extrahiere spezifische Details ---
|
||||||
# Versuchen Sie, wichtige Meta-Informationen zu extrahieren.
|
title = soup.find('title')
|
||||||
title = soup.find('title') # Titel-Tag
|
meta_desc = soup.find('meta', attrs={'name': 'description'})
|
||||||
meta_desc = soup.find('meta', attrs={'name': 'description'}) # Meta Description
|
h1 = soup.find('h1')
|
||||||
h1 = soup.find('h1') # Erstes H1-Tag
|
|
||||||
|
|
||||||
details_list = [] # Liste zum Sammeln der extrahierten Details
|
details_list = []
|
||||||
|
|
||||||
# Extrahieren und bereinigen Sie den Text (clean_text nutzt globale Funktion)
|
|
||||||
if title: details_list.append(f"Title: {clean_text(title.get_text())}")
|
if title: details_list.append(f"Title: {clean_text(title.get_text())}")
|
||||||
# Pruefen Sie, ob das 'content' Attribut existiert und nicht leer ist
|
|
||||||
if meta_desc and meta_desc.get('content'): details_list.append(f"Description: {clean_text(meta_desc['content'])}")
|
if meta_desc and meta_desc.get('content'): details_list.append(f"Description: {clean_text(meta_desc['content'])}")
|
||||||
if h1: details_list.append(f"H1: {clean_text(h1.get_text())}")
|
if h1: details_list.append(f"H1: {clean_text(h1.get_text())}")
|
||||||
|
|
||||||
# Wenn Details gefunden wurden
|
|
||||||
if details_list:
|
if details_list:
|
||||||
# Verbinden Sie die Details mit einem Trennzeichen
|
|
||||||
result_string = " | ".join(details_list)
|
result_string = " | ".join(details_list)
|
||||||
logger.debug(f"Details fuer {url[:100]}... extrahiert: {result_string[:100]}...") # Logge Ergebnis (gekuerzt)
|
logger.debug(f"Details fuer {url[:100]}... extrahiert: {result_string[:100]}...")
|
||||||
return result_string # Gebe die extrahierten Details zurueck
|
return result_string
|
||||||
else:
|
else:
|
||||||
# Wenn keine Standard-Details gefunden wurden
|
|
||||||
logger.debug(f"Keine Standard-Details (Title, Description, H1) gefunden fuer {url[:100]}...")
|
logger.debug(f"Keine Standard-Details (Title, Description, H1) gefunden fuer {url[:100]}...")
|
||||||
return "k.A. (Keine Standard-Details gefunden)" # Gebe spezifischen Wert zurueck
|
return "k.A. (Keine Standard-Details gefunden)"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Wenn get_soup_for_details None zurueckgegeben hat (nach Retries fehlgeschlagen)
|
logger.error(f"Scraping fuer Details fehlgeschlagen nach Retries fuer {url[:100]}...")
|
||||||
# Der Fehler wurde bereits in get_soup_for_details oder retry geloggt.
|
return "k.A. (Scraping fehlgeschlagen)"
|
||||||
logger.error(f"Scraping fuer Details fehlgeschlagen nach Retries fuer {url[:100]}...") # Logge finalen Fehler
|
|
||||||
return "k.A. (Scraping fehlgeschlagen)" # Gebe spezifischen Fehlerwert zurueck
|
|
||||||
|
|
||||||
# Fangen Sie alle anderen verbleibenden Exceptions ab (sollten selten sein)
|
except Exception as e: # Dieser except-Block gehört zum äußeren try
|
||||||
# retry_on_failure auf get_soup_for_details behandelt die meisten Netzwerk-/HTTP-Fehler.
|
|
||||||
except Exception as e:
|
|
||||||
# Logge den Fehler auf Error-Level
|
|
||||||
logger.error(f"FEHLER in scrape_website_details fuer {url[:100]}...: {type(e).__name__} - {e}")
|
logger.error(f"FEHLER in scrape_website_details fuer {url[:100]}...: {type(e).__name__} - {e}")
|
||||||
# Der Fehler wird bereits vom retry_on_failure geloggt, wenn er von get_soup_for_details kam.
|
logger.debug(traceback.format_exc()) # Hinzugefügt für besseres Debugging
|
||||||
# Hier wird nur ein Fehler gefangen, der aus der Logik dieser Funktion selbst kommt (z.B. Fehler beim String-Handling).
|
return f"k.A. (Fehler: {str(e)[:100]}...)"
|
||||||
# Geben Sie einen Fehlerwert zurueck, der im Sheet gespeichert werden kann.
|
|
||||||
return f"k.A. (Fehler: {str(e)[:100]}...)" # Signalisiert Fehler (gekuerzt)
|
|
||||||
|
|
||||||
|
|
||||||
def is_valid_wikipedia_article_url(url_to_check, lang=None):
|
def is_valid_wikipedia_article_url(url_to_check, lang=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user