diff --git a/brancheneinstufung.py b/brancheneinstufung.py index eb72f56a..dda3ac8f 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -12,7 +12,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "1.1.6" # Neue Version nach Modus-Erweiterung + VERSION = "1.1.7" # Neue Version LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -81,10 +81,9 @@ class GoogleSheetHandler: self.sheet = gspread.authorize(creds).open_by_url(Config.SHEET_URL).sheet1 self.sheet_values = self.sheet.get_all_values() def get_start_index(self): - # Hier wird Spalte N (Index 14) wie bisher verwendet. 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) - # Update-Aufrufe erfolgen separat für verschiedene Spalten. + # Update-Aufrufe erfolgen separat. # ==================== WIKIPEDIA SCRAPER ==================== class WikipediaScraper: @@ -162,7 +161,7 @@ class WikipediaScraper: keywords_map = { 'branche': ['branche', 'industrie', 'tätigkeit', 'geschäftsfeld', 'sektor', 'produkte', 'leistungen', 'aktivitäten', 'wirtschaftszweig'], 'umsatz': ['umsatz', 'jahresumsatz', 'konzernumsatz', 'gesamtumsatz', 'erlöse', 'umsatzerlöse', 'einnahmen', 'ergebnis', 'jahresergebnis'], - 'mitarbeiter': ['mitarbeiter', 'beschäftigte', 'personal', 'mitarbeiterzahl'] + 'mitarbeiter': ['mitarbeiter', 'beschäftigte', 'personal', 'mitarbeiterzahl', 'angestellte', 'belegschaft', 'personalstärke'] } keywords = keywords_map.get(target, []) for row in infobox.find_all('tr'): @@ -178,13 +177,13 @@ class WikipediaScraper: return ' '.join(clean_val.split()).strip() if target == 'umsatz': raw = raw_value.lower() - match = re.search(r'(\d{1,3}(?:[.,]\d{3})*|\d+)', raw) + match = re.search(r'([\d.,]+)', raw) if match: num_str = match.group(1) if ',' in num_str: num_str = num_str.replace('.', '').replace(',', '.') else: - num_str = num_str.replace('.', '') + num_str = num_str.replace(' ', '').replace('.', '') try: num = float(num_str) except Exception as e: @@ -200,6 +199,9 @@ class WikipediaScraper: return raw_value.strip() if target == 'mitarbeiter': raw = raw_value.lower() + # Falls "mitarbeiterzahl" explizit vorkommt, entferne diesen Teil + if "mitarbeiterzahl" in raw: + raw = raw.split("mitarbeiterzahl")[-1] numbers = re.findall(r'\d+', raw) if numbers: return numbers[0] @@ -268,20 +270,27 @@ class DataProcessor: def __init__(self): self.sheet_handler = GoogleSheetHandler() self.wiki_scraper = WikipediaScraper() - def process_rows(self, num_rows): - start_index = self.sheet_handler.get_start_index() - print(f"Starte bei Zeile {start_index+1}") - for i in range(start_index, min(start_index + num_rows, len(self.sheet_handler.sheet_values))): - row = self.sheet_handler.sheet_values[i] - self._process_single_row(i+1, row) + def process_rows(self, num_rows=None): + # Im Re-Evaluierungsmodus wird num_rows ignoriert. + if MODE == "2": + print("Re-Evaluierungsmodus: Verarbeitung aller Zeilen mit 'x' in Spalte A.") + else: + start_index = self.sheet_handler.get_start_index() + print(f"Starte bei Zeile {start_index+1}") + for i, row in enumerate(self.sheet_handler.sheet_values[1:], start=2): + if MODE == "2": + # Nur Zeilen mit "x" in Spalte A verarbeiten + if row[0].strip().lower() == "x": + self._process_single_row(i, row) + else: + # Normalmodus: Alle Zeilen ab Startindex verarbeiten + if i >= self.sheet_handler.get_start_index(): + self._process_single_row(i, row) def _process_single_row(self, row_num, row_data): # Modusabhängige Verarbeitung: # Normalmodus (Modus "1"): Firmenname in Spalte A, Website in Spalte B; Ausgabe in G:K, Datum in N, Version in Q. # Re-Evaluierungsmodus (Modus "2"): Nur Zeilen mit "x" in Spalte A; Firmenname in Spalte B, Website in Spalte C; Ausgabe in H:L, Datum in O, Version in R. if MODE == "2": - if not row_data[0].strip().lower() == "x": - print(f"[{datetime.now().strftime('%H:%M:%S')}] Überspringe Zeile {row_num}, kein 'x' in Spalte A.") - return company_name = row_data[1] if len(row_data) > 1 else "" website = row_data[2] if len(row_data) > 2 else "" update_range = f"H{row_num}:L{row_num}" @@ -316,11 +325,14 @@ class DataProcessor: if __name__ == "__main__": mode_input = input("Wählen Sie den Modus: 1 für normalen Modus, 2 für Re-Evaluierungsmodus: ").strip() MODE = "2" if mode_input == "2" else "1" - try: - num_rows = int(input("Wieviele Zeilen sollen überprüft werden? ")) - except Exception as e: - print("Ungültige Eingabe. Bitte eine Zahl eingeben.") - exit(1) + if MODE == "1": + try: + num_rows = int(input("Wieviele Zeilen sollen überprüft werden? ")) + except Exception as e: + print("Ungültige Eingabe. Bitte eine Zahl eingeben.") + exit(1) + else: + num_rows = None # Im Re-Evaluierungsmodus werden alle markierten Zeilen verarbeitet. processor = DataProcessor() processor.process_rows(num_rows) print("\n✅ Wikipedia-Auswertung abgeschlossen")