v1.4.7.1 Verbesserter Website-Scraper: User-Agent gesetzt und SSL-Verifikation optional
- 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.
This commit is contained in:
@@ -1,15 +1,17 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
Version: v1.4.7
|
Version: v1.4.8
|
||||||
Datum: {aktuelles Datum}
|
Datum: {aktuelles Datum}
|
||||||
Git-Überschrift (max. 100 Zeichen):
|
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:
|
Git-Änderungsbeschreibung:
|
||||||
- In evaluate_branche_chatgpt() wird geprüft, ob sowohl Wiki- als auch externe Beschreibung 'k.A.' sind.
|
- In get_website_raw() wurde ein User-Agent-Header hinzugefügt, um Blockaden zu vermeiden.
|
||||||
- Falls ja, wird der Website-Zusammenfassungstext als Fallback zur Branchenbewertung genutzt.
|
- SSL-Zertifikatüberprüfung kann jetzt optional durch den Parameter verify_cert deaktiviert werden (Standard: False).
|
||||||
- Zusätzliche debug_print()-Ausgaben wurden eingefügt, um anzuzeigen, welche Informationen für die Entscheidungsfindung herangezogen wurden.
|
- Zusätzliche Debug-Ausgaben protokollieren den Statuscode und erste 100 Zeichen des extrahierten Textes.
|
||||||
- Nach der ChatGPT-Antwort wird das Endergebnis ebenfalls geloggt.
|
- Damit wird sichergestellt, dass beim Fehlen eines Wikipedia-Eintrags der Website-Fallback besser analysiert werden kann.
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ except ImportError:
|
|||||||
|
|
||||||
# ==================== KONFIGURATION ====================
|
# ==================== KONFIGURATION ====================
|
||||||
class Config:
|
class Config:
|
||||||
VERSION = "v1.4.5"
|
VERSION = "v1.4.8"
|
||||||
LANG = "de"
|
LANG = "de"
|
||||||
CREDENTIALS_FILE = "service_account.json"
|
CREDENTIALS_FILE = "service_account.json"
|
||||||
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
|
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()
|
processed_timestamps[field] = datetime.now().isoformat()
|
||||||
|
|
||||||
# ==================== NEUE FUNKTION: Website-Rohtext extrahieren ====================
|
# ==================== NEUE FUNKTION: Website-Rohtext extrahieren ====================
|
||||||
def get_website_raw(url, max_length=1000):
|
def get_website_raw(url, max_length=1000, verify_cert=False):
|
||||||
# Falls URL kein Schema besitzt, ergänze "https://"
|
"""
|
||||||
|
Ruft die Website ab und gibt den bereinigten Text des <body>-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"):
|
if not url.lower().startswith("http"):
|
||||||
url = "https://" + url
|
url = "https://" + url
|
||||||
|
headers = {
|
||||||
|
"User-Agent": "Mozilla/5.0 (compatible; AcmeInc/1.0; +http://example.com/bot)"
|
||||||
|
}
|
||||||
try:
|
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)
|
soup = BeautifulSoup(response.text, Config.HTML_PARSER)
|
||||||
body = soup.find('body')
|
body = soup.find('body')
|
||||||
if body:
|
if body:
|
||||||
text = body.get_text(separator=' ', strip=True)
|
text = body.get_text(separator=' ', strip=True)
|
||||||
text = re.sub(r'\s+', ' ', text)
|
text = re.sub(r'\s+', ' ', text)
|
||||||
return text[:max_length]
|
result = text[:max_length]
|
||||||
return "k.A."
|
debug_print(f"Website {url} erfolgreich gescrapt. Extrahierter Text (Länge {len(result)}): {result[:100]}...")
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
debug_print(f"Kein <body>-Tag gefunden in {url}")
|
||||||
|
return "k.A."
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler beim Abrufen der Website {url}: {e}")
|
debug_print(f"Fehler beim Abrufen der Website {url}: {e}")
|
||||||
return "k.A."
|
return "k.A."
|
||||||
|
|
||||||
|
|
||||||
# ==================== NEUE FUNKTION: Website-Zusammenfassung erstellen ====================
|
# ==================== NEUE FUNKTION: Website-Zusammenfassung erstellen ====================
|
||||||
def summarize_website_content(raw_text):
|
def summarize_website_content(raw_text):
|
||||||
if raw_text == "k.A." or raw_text.strip() == "":
|
if raw_text == "k.A." or raw_text.strip() == "":
|
||||||
|
|||||||
Reference in New Issue
Block a user