From cce3e93ccb5765a5570ce43dbf4f0e53956b7df8 Mon Sep 17 00:00:00 2001 From: Floke Date: Wed, 9 Apr 2025 07:46:03 +0000 Subject: [PATCH] v1.4.7.1 Verbesserter Website-Scraper: User-Agent gesetzt und SSL-Verifikation optional MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - In get_website_raw() wurde ein User-Agent-Header hinzugefügt, um Blockaden zu vermeiden. - SSL-Zertifikatüberprüfung kann jetzt optional durch den Parameter verify_cert deaktiviert werden (Standard: False). - Zusätzliche Debug-Ausgaben protokollieren den Statuscode und erste 100 Zeichen des extrahierten Textes. - Damit wird sichergestellt, dass beim Fehlen eines Wikipedia-Eintrags der Website-Fallback besser analysiert werden kann. --- brancheneinstufung.py | 51 +++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index e7c8bb2b..b72b994b 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -1,15 +1,17 @@ #!/usr/bin/env python3 """ -Version: v1.4.7 +Version: v1.4.8 Datum: {aktuelles Datum} Git-Überschrift (max. 100 Zeichen): -v1.4.7 Fallback Website-Details: Mehr Logging & Fallback in Branchenbewertung +v1.4.8 Verbesserter Website-Scraper: User-Agent gesetzt und SSL-Verifikation optional + Git-Änderungsbeschreibung: -- In evaluate_branche_chatgpt() wird geprüft, ob sowohl Wiki- als auch externe Beschreibung 'k.A.' sind. -- Falls ja, wird der Website-Zusammenfassungstext als Fallback zur Branchenbewertung genutzt. -- Zusätzliche debug_print()-Ausgaben wurden eingefügt, um anzuzeigen, welche Informationen für die Entscheidungsfindung herangezogen wurden. -- Nach der ChatGPT-Antwort wird das Endergebnis ebenfalls geloggt. +- In get_website_raw() wurde ein User-Agent-Header hinzugefügt, um Blockaden zu vermeiden. +- SSL-Zertifikatüberprüfung kann jetzt optional durch den Parameter verify_cert deaktiviert werden (Standard: False). +- Zusätzliche Debug-Ausgaben protokollieren den Statuscode und erste 100 Zeichen des extrahierten Textes. +- Damit wird sichergestellt, dass beim Fehlen eines Wikipedia-Eintrags der Website-Fallback besser analysiert werden kann. + """ @@ -35,7 +37,7 @@ except ImportError: # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.4.5" + VERSION = "v1.4.8" LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -273,23 +275,48 @@ def mark_processed(field): processed_timestamps[field] = datetime.now().isoformat() # ==================== NEUE FUNKTION: Website-Rohtext extrahieren ==================== -def get_website_raw(url, max_length=1000): - # Falls URL kein Schema besitzt, ergänze "https://" +def get_website_raw(url, max_length=1000, verify_cert=False): + """ + Ruft die Website ab und gibt den bereinigten Text des -Inhalts zurück (maximal max_length Zeichen). + Zusätzliche Verbesserungen: + - Falls kein Schema vorhanden ist, wird "https://" ergänzt. + - Es werden zusätzliche Header (insbesondere ein User-Agent) mitgeschickt. + - Optional wird die Zertifikatüberprüfung deaktiviert (verify_cert=False). + + Args: + url (str): Die URL der Website. + max_length (int): Maximale Länge des zurückgegebenen Texts. + verify_cert (bool): Gibt an, ob SSL-Zertifikate verifiziert werden sollen. + + Returns: + str: Extrahierter Text oder "k.A.", wenn Fehler auftreten. + """ if not url.lower().startswith("http"): url = "https://" + url + headers = { + "User-Agent": "Mozilla/5.0 (compatible; AcmeInc/1.0; +http://example.com/bot)" + } try: - response = requests.get(url, timeout=10) + response = requests.get(url, timeout=10, headers=headers, verify=verify_cert) + if response.status_code != 200: + debug_print(f"Fehler: Website {url} lieferte Statuscode {response.status_code}") + return "k.A." soup = BeautifulSoup(response.text, Config.HTML_PARSER) body = soup.find('body') if body: text = body.get_text(separator=' ', strip=True) text = re.sub(r'\s+', ' ', text) - return text[:max_length] - return "k.A." + result = text[:max_length] + debug_print(f"Website {url} erfolgreich gescrapt. Extrahierter Text (Länge {len(result)}): {result[:100]}...") + return result + else: + debug_print(f"Kein -Tag gefunden in {url}") + return "k.A." except Exception as e: debug_print(f"Fehler beim Abrufen der Website {url}: {e}") return "k.A." + # ==================== NEUE FUNKTION: Website-Zusammenfassung erstellen ==================== def summarize_website_content(raw_text): if raw_text == "k.A." or raw_text.strip() == "":