Extraktion von Umsatz und Mitarbeiterzahl optimiert – Umsatz in Mio € und Mitarbeiterzahl als ganze

Umsatz-Extraktion:

Die Regex erfasst nun den Zahlenstring (z. B. „10,0“) und entfernt Tausendertrennzeichen (Punkte, Leerzeichen).

Wird im Text "mrd" gefunden, wird der Wert mit 1000 multipliziert, ansonsten bleibt er (bei "mio") unverändert.

Fehlt eine Einheit, wird der Wert als in Euro angegeben angenommen und durch 1.000.000 geteilt, sodass der Umsatz in Mio € resultiert.

Mitarbeiter-Extraktion:

Spezifische Suche mittels Regex nach dem Schlüsselwort "mitarbeiterzahl" (oder "mitarbeiter") gefolgt von einem Zahlenformat (z. B. "4.175").

Falls der gefundene Zahlenstring einen Punkt als Tausendertrennzeichen enthält (und kein Komma), wird dieser entfernt, sodass "4.175" zu "4175" wird.

Re-Evaluierungsmodus:

Alle Zeilen mit einem "x" in Spalte A werden verarbeitet, und der komplette Infobox-Inhalt wird in der Konsole ausgegeben.

Spaltenanpassungen:

Normalmodus: Firmenname in Spalte A, Website in Spalte B; Ausgabe in G:K, Datum in N, Version in Q.

Re‑Evaluierungsmodus: Firmenname in Spalte B, Website in Spalte C; Ausgabe in H:L, Datum in O, Version in R.
This commit is contained in:
2025-04-01 04:03:57 +00:00
parent b3559e143a
commit be0eaf2562

View File

@@ -12,7 +12,7 @@ import csv
# ==================== KONFIGURATION ====================
class Config:
VERSION = "1.1.10" # Neue Version mit verbesserter Umsatz- und Mitarbeiterextraktion
VERSION = "1.1.11" # Neue Version mit verbesserter Umsatz- und Mitarbeiterextraktion
LANG = "de"
CREDENTIALS_FILE = "service_account.json"
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
@@ -180,6 +180,7 @@ class WikipediaScraper:
match = re.search(r'([\d.,]+)', raw)
if match:
num_str = match.group(1)
# Falls Komma vorhanden: Punkte als Tausendertrennzeichen entfernen, Komma als Dezimaltrenner ersetzen
if ',' in num_str:
num_str = num_str.replace('.', '').replace(',', '.')
else:
@@ -199,20 +200,27 @@ class WikipediaScraper:
return raw_value.strip()
if target == 'mitarbeiter':
raw = raw_value.lower()
# Suche nach "mitarbeiterzahl" oder "mitarbeiter" gefolgt von Zahlen (inkl. Tausendertrennzeichen)
# Spezifisch nach "mitarbeiterzahl" suchen, um den direkt folgenden Zahlenwert zu extrahieren.
match = re.search(r'(?:mitarbeiterzahl|mitarbeiter)[^\d]*([\d.,\s]+)', raw)
if match:
num_str = match.group(1)
# Entferne Tausendertrennzeichen (Punkte oder Leerzeichen)
num_str = num_str.replace(" ", "")
# Entferne alle Zeichen, die keine Ziffern sind
# Falls es nur Punkte und keine Kommas gibt, behandeln wir diese als Tausendertrennzeichen.
if '.' in num_str and ',' not in num_str:
num_str = num_str.replace('.', '')
# Entferne eventuell verbleibende nicht-numerische Zeichen.
num_str = re.sub(r'[^\d]', '', num_str)
if num_str:
debug_print(f"Mitarbeiterzahl gefunden: {num_str} in Text: {raw_value}")
return num_str
# Fallback: Kombiniere alle gefundenen Zahlen
numbers = re.findall(r'\d+', raw)
if numbers:
return "".join(numbers)
# Fallback: Falls keine spezifische Suche funktioniert, versuche die erste Zahl zu extrahieren.
match = re.search(r'(\d{1,3}(?:\.\d{3})+|\d+)', raw)
if match:
num_str = match.group(1)
if '.' in num_str and ',' not in num_str:
num_str = num_str.replace('.', '')
return num_str
return raw_value.strip()
return "k.A."
def extract_full_infobox(self, soup):