Optimierung der Wikipedia-Auswertung: Neue Spaltenreihenfolge, Datum/Uhrzeit und Version
Spaltenreihenfolge angepasst: G: Wikipedia URL H: Erster Absatz des Wikipedia-Artikels I: Branche (aus Infobox) J: Umsatz (als Zahl in Mio €, z. B. "159") K: Anzahl Mitarbeiter (aus Infobox) Neue Felder: Spalte N: Aktuelles Datum und Zeit Spalte Q: Version Infobox-Ausgabe entfernt: Die komplette Infobox wird nicht mehr ausgegeben. Normalisierung der Firmennamen: Erweiterte Regex entfernt nun eine umfangreiche Liste gängiger Firmierungsformen (u.a. GmbH, G.m.b.H., UG, AG, OHG, KG, GmbH & Co. KG, AG & Co. KG, e.K., Ltd., S.a r.l., Stiftung, Genossenschaft, gGmbH, gUG, PartG, KGaA, SE, OG, e.U., etc.). Erster Absatz: Eine neue Methode extrahiert den ersten sinnvollen Absatz des Wikipedia-Artikels. Umsatzformatierung: Umsatz wird als reine Zahl (in Mio €) ausgegeben. Google Sheet Update: Aktualisierung erfolgt nun in separaten Ranges für die gewünschten Spalten (G:K, N und Q).
This commit is contained in:
@@ -12,7 +12,7 @@ import csv
|
||||
|
||||
# ==================== KONFIGURATION ====================
|
||||
class Config:
|
||||
VERSION = "1.1.3"
|
||||
VERSION = "1.1.4"
|
||||
LANG = "de"
|
||||
CREDENTIALS_FILE = "service_account.json"
|
||||
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
|
||||
@@ -55,8 +55,20 @@ def normalize_company_name(name):
|
||||
"""Entfernt gängige Firmierungsformen und normalisiert den Namen."""
|
||||
if not name:
|
||||
return ""
|
||||
# Liste gängiger Firmierungsformen (inklusive "Gruppe")
|
||||
pattern = r'\b(gmbh|ag|aktiengesellschaft|co\.?\s*kg|mbh|&\s*co\.?\s*kg|e\.v\.|limited|ltd|inc|corp|corporation|gruppe)\b'
|
||||
# Liste gängiger Firmierungsformen
|
||||
forms = [
|
||||
r'gmbh', r'g\.m\.b\.h\.', r'ug', r'u\.g\.', r'ug \(haftungsbeschränkt\)',
|
||||
r'u\.g\. \(haftungsbeschränkt\)', r'ag', r'a\.g\.', r'ohg', r'o\.h\.g\.',
|
||||
r'kg', r'k\.g\.', r'gmbh & co\. kg', r'g\.m\.b\.h\. & co\. k\.g\.',
|
||||
r'ag & co\. kg', r'a\.g\. & co\. k\.g\.', r'e\.k\.', r'e\.kfm\.', r'e\.kfr\.',
|
||||
r'ltd\.', r'ltd & co\. kg', r's\.a r\.l\.', r'stiftung', r'genossenschaft',
|
||||
r'ggmbh', r'gug', r'partg', r'partgmbb', r'kgaa', r'se', r'og', r'o\.g\.',
|
||||
r'e\.u\.', r'ges\.n\.b\.r\.', r'genmbh', r'verein', r'kollektivgesellschaft',
|
||||
r'kommanditgesellschaft', r'einzelfirma', r'sàrl', r'sa', r'sagl',
|
||||
r'gmbh & co\. ohg', r'ag & co\. ohg', r'gmbh & co\. kgaa', r'ag & co\. kgaa',
|
||||
r's\.a\.', r's\.p\.a\.', r'b\.v\.', r'n\.v\.'
|
||||
]
|
||||
pattern = r'\b(' + '|'.join(forms) + r')\b'
|
||||
normalized = re.sub(pattern, '', name, flags=re.IGNORECASE)
|
||||
normalized = re.sub(r'[\-–]', ' ', normalized) # Ersetze Bindestriche durch Leerzeichen
|
||||
normalized = re.sub(r'\s+', ' ', normalized).strip()
|
||||
@@ -79,13 +91,11 @@ class GoogleSheetHandler:
|
||||
self.sheet_values = self.sheet.get_all_values()
|
||||
|
||||
def get_start_index(self):
|
||||
"""Ermittelt die erste leere Zeile in Spalte N"""
|
||||
"""Ermittelt die erste leere Zeile in Spalte N (Index 14)"""
|
||||
filled_n = [row[13] if len(row) > 13 else '' for row in self.sheet_values[1:]]
|
||||
return next((i + 1 for i, v in enumerate(filled_n, start=1) if not str(v).strip()), len(filled_n) + 1)
|
||||
|
||||
def update_row(self, row_num, values):
|
||||
"""Aktualisiert eine Zeile im Sheet (Spalten G bis K, also 5 Spalten)"""
|
||||
self.sheet.update(range_name=f"G{row_num}:K{row_num}", values=[values])
|
||||
# Für die neuen Updates nutzen wir separate Update-Aufrufe
|
||||
|
||||
# ==================== WIKIPEDIA SCRAPER ====================
|
||||
class WikipediaScraper:
|
||||
@@ -208,7 +218,6 @@ class WikipediaScraper:
|
||||
match = re.search(r'(\d{1,3}(?:[.,]\d{3})*|\d+)', raw_value.replace('.', '').replace(',', '.'))
|
||||
if match:
|
||||
num = float(match.group(1))
|
||||
# Umsatz in Mio € als Zahl (aufgerundet)
|
||||
return str(int(round(num)))
|
||||
return raw_value.strip()
|
||||
if target == 'mitarbeiter':
|
||||
@@ -310,16 +319,22 @@ class DataProcessor:
|
||||
else:
|
||||
company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.'}
|
||||
|
||||
current_values = self.sheet_handler.sheet.row_values(row_num)
|
||||
new_values = [
|
||||
company_data.get('url', 'k.A.'), # Spalte G: Wikipedia URL
|
||||
company_data.get('first_paragraph', 'k.A.'), # Spalte H: Erster Absatz
|
||||
company_data.get('branche', 'k.A.'), # Spalte I: Branche
|
||||
company_data.get('umsatz', 'k.A.'), # Spalte J: Umsatz (als Zahl in Mio €)
|
||||
company_data.get('mitarbeiter', 'k.A.') # Spalte K: Anzahl Mitarbeiter
|
||||
]
|
||||
self.sheet_handler.update_row(row_num, new_values)
|
||||
print(f"✅ Aktualisiert: URL: {new_values[0]}, Erster Absatz: {new_values[1][:30]}..., Branche: {new_values[2]}, Umsatz: {new_values[3]}, Mitarbeiter: {new_values[4]}")
|
||||
# Update der Spalten:
|
||||
# G: URL, H: erster Absatz, I: Branche, J: Umsatz (als Zahl), K: Mitarbeiter
|
||||
self.sheet_handler.sheet.update(f"G{row_num}:K{row_num}", [[
|
||||
company_data.get('url', 'k.A.'),
|
||||
company_data.get('first_paragraph', 'k.A.'),
|
||||
company_data.get('branche', 'k.A.'),
|
||||
company_data.get('umsatz', 'k.A.'),
|
||||
company_data.get('mitarbeiter', 'k.A.')
|
||||
]])
|
||||
# Spalte N: Datum und aktuelle Zeit
|
||||
current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.sheet_handler.sheet.update(f"N{row_num}", [[current_dt]])
|
||||
# Spalte Q: Version
|
||||
self.sheet_handler.sheet.update(f"Q{row_num}", [[Config.VERSION]])
|
||||
|
||||
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.')}")
|
||||
time.sleep(Config.RETRY_DELAY)
|
||||
|
||||
# ==================== MAIN ====================
|
||||
|
||||
Reference in New Issue
Block a user