Re-Evaluierungsmodus: Vollständige Infobox-Ausgabe und verbesserte Umsatz-/Mitarbeiterextraktion (v1
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.
This commit is contained in:
@@ -12,7 +12,7 @@ import csv
|
|||||||
|
|
||||||
# ==================== KONFIGURATION ====================
|
# ==================== KONFIGURATION ====================
|
||||||
class Config:
|
class Config:
|
||||||
VERSION = "1.1.8" # Neue Version
|
VERSION = "1.1.9" # Neue Version mit Re-Evaluierungsmodus, Umsatz- und Mitarbeiteroptimierung
|
||||||
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"
|
||||||
@@ -199,12 +199,13 @@ class WikipediaScraper:
|
|||||||
return raw_value.strip()
|
return raw_value.strip()
|
||||||
if target == 'mitarbeiter':
|
if target == 'mitarbeiter':
|
||||||
raw = raw_value.lower()
|
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:
|
if "mitarbeiterzahl" in raw:
|
||||||
match = re.search(r'mitarbeiterzahl\D*(\d+)', raw)
|
match = re.search(r'mitarbeiterzahl\D*(\d+)', raw)
|
||||||
if match:
|
if match:
|
||||||
|
debug_print(f"Mitarbeiterzahl gefunden: {match.group(1)} in Text: {raw_value}")
|
||||||
return match.group(1)
|
return match.group(1)
|
||||||
# Alternativ: Finde die erste Zahl
|
# Fallback: Erste gefundene Zahl
|
||||||
numbers = re.findall(r'\d+', raw)
|
numbers = re.findall(r'\d+', raw)
|
||||||
if numbers:
|
if numbers:
|
||||||
return numbers[0]
|
return numbers[0]
|
||||||
@@ -228,7 +229,7 @@ class WikipediaScraper:
|
|||||||
return result
|
return result
|
||||||
def extract_company_data(self, page_url):
|
def extract_company_data(self, page_url):
|
||||||
if not 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:
|
try:
|
||||||
response = requests.get(page_url)
|
response = requests.get(page_url)
|
||||||
soup = BeautifulSoup(response.text, Config.HTML_PARSER)
|
soup = BeautifulSoup(response.text, Config.HTML_PARSER)
|
||||||
@@ -243,11 +244,12 @@ class WikipediaScraper:
|
|||||||
'first_paragraph': first_paragraph,
|
'first_paragraph': first_paragraph,
|
||||||
'branche': branche_val,
|
'branche': branche_val,
|
||||||
'umsatz': umsatz_val,
|
'umsatz': umsatz_val,
|
||||||
'mitarbeiter': mitarbeiter_val
|
'mitarbeiter': mitarbeiter_val,
|
||||||
|
'full_infobox': full_infobox
|
||||||
}
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Extraktionsfehler: {str(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
|
@retry_on_failure
|
||||||
def search_company_article(self, company_name, website):
|
def search_company_article(self, company_name, website):
|
||||||
search_terms = self._generate_search_terms(company_name, website)
|
search_terms = self._generate_search_terms(company_name, website)
|
||||||
@@ -304,7 +306,8 @@ class DataProcessor:
|
|||||||
if article:
|
if article:
|
||||||
company_data = self.wiki_scraper.extract_company_data(article.url)
|
company_data = self.wiki_scraper.extract_company_data(article.url)
|
||||||
else:
|
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=[[
|
self.sheet_handler.sheet.update(values=[[
|
||||||
company_data.get('url', 'k.A.'),
|
company_data.get('url', 'k.A.'),
|
||||||
company_data.get('first_paragraph', '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=[[current_dt]], range_name=dt_range)
|
||||||
self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_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.')}")
|
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)
|
time.sleep(Config.RETRY_DELAY)
|
||||||
|
|
||||||
# ==================== MAIN ====================
|
# ==================== MAIN ====================
|
||||||
|
|||||||
Reference in New Issue
Block a user