From bbe14c8a9d08fd75ab47a507b2d64c0f2185a230 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 1 Apr 2025 03:38:53 +0000 Subject: [PATCH] =?UTF-8?q?Re-Evaluierungsmodus:=20Vollst=C3=A4ndige=20Inf?= =?UTF-8?q?obox-Ausgabe=20und=20verbesserte=20Umsatz-/Mitarbeiterextraktio?= =?UTF-8?q?n=20(v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Infobox-Debug im Re-Evaluierungsmodus: Im Re-Evaluierungsmodus (Modus "2") wird nun der komplette Inhalt der Infobox (Key "full_infobox") in der Konsole ausgegeben. Umsatz-Extraktion: Die Regex wurde angepasst, um Zahlenstrings robuster zu normalisieren – Punkte als Tausendertrennzeichen werden entfernt, Kommas als Dezimaltrenner genutzt. Fehlt eine Einheit ("mio"/"mrd"), wird der Wert als Euro angenommen und durch 1.000.000 geteilt. Mitarbeiterextraktion: Die Regex für Mitarbeiter wurde erweitert: Wird explizit "mitarbeiterzahl" gefunden, wird der direkt folgende Zahlenwert extrahiert; sonst wird der erste gefundene Zahlenwert verwendet. Weitere Synonyme wie "angestellte", "belegschaft" und "personalstärke" sind in der Schlüsselwortliste enthalten. Re-Evaluierungsmodus: Im Modus "2" werden alle Zeilen verarbeitet, die in Spalte A ein "x" enthalten – ohne Nachfrage nach Zeilenzahl und ohne Ausgabe von übersprungenen Zeilen. Spaltenanpassungen: Normalmodus: Firmenname in A, Website in B; Ausgabe in G:K, Datum in N, Version in Q. Re‑Evaluierungsmodus: Firmenname in B, Website in C; Ausgabe in H:L, Datum in O, Version in R. --- brancheneinstufung.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index a5d12f5f..d6d6d2f4 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -12,7 +12,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "1.1.8" # Neue Version + VERSION = "1.1.9" # Neue Version mit Re-Evaluierungsmodus, Umsatz- und Mitarbeiteroptimierung LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -199,12 +199,13 @@ class WikipediaScraper: return raw_value.strip() if target == 'mitarbeiter': raw = raw_value.lower() - # Spezifisch nach "mitarbeiterzahl" suchen und den direkt folgenden Zahlenwert extrahieren + # Spezifische Suche: Wenn "mitarbeiterzahl" vorkommt, direkt danach extrahieren. if "mitarbeiterzahl" in raw: match = re.search(r'mitarbeiterzahl\D*(\d+)', raw) if match: + debug_print(f"Mitarbeiterzahl gefunden: {match.group(1)} in Text: {raw_value}") return match.group(1) - # Alternativ: Finde die erste Zahl + # Fallback: Erste gefundene Zahl numbers = re.findall(r'\d+', raw) if numbers: return numbers[0] @@ -228,7 +229,7 @@ class WikipediaScraper: return result def extract_company_data(self, page_url): if not page_url: - return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.'} + return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} try: response = requests.get(page_url) soup = BeautifulSoup(response.text, Config.HTML_PARSER) @@ -243,11 +244,12 @@ class WikipediaScraper: 'first_paragraph': first_paragraph, 'branche': branche_val, 'umsatz': umsatz_val, - 'mitarbeiter': mitarbeiter_val + 'mitarbeiter': mitarbeiter_val, + 'full_infobox': full_infobox } except Exception as e: debug_print(f"Extraktionsfehler: {str(e)}") - return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.'} + return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} @retry_on_failure def search_company_article(self, company_name, website): search_terms = self._generate_search_terms(company_name, website) @@ -304,7 +306,8 @@ class DataProcessor: if article: company_data = self.wiki_scraper.extract_company_data(article.url) else: - company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.'} + company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} + # Update der Spalten self.sheet_handler.sheet.update(values=[[ company_data.get('url', 'k.A.'), company_data.get('first_paragraph', 'k.A.'), @@ -316,6 +319,11 @@ class DataProcessor: self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range) self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range) print(f"✅ Aktualisiert: URL: {company_data.get('url', 'k.A.')}, Erster Absatz: {company_data.get('first_paragraph', 'k.A.')[:30]}..., Branche: {company_data.get('branche', 'k.A.')}, Umsatz: {company_data.get('umsatz', 'k.A.')}, Mitarbeiter: {company_data.get('mitarbeiter', 'k.A.')}") + # Im Re-Evaluierungsmodus: Ausgabe des kompletten Infobox-Inhalts in der Konsole + if MODE == "2": + print("----- Vollständiger Infobox-Inhalt -----") + print(company_data.get("full_infobox", "k.A.")) + print("----------------------------------------") time.sleep(Config.RETRY_DELAY) # ==================== MAIN ====================