diff --git a/brancheneinstufung.py b/brancheneinstufung.py index e8bfed75..f2dfd63c 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -321,6 +321,11 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 über SerpAPI und trägt gefundene URLs in Spalte M ein. Setzt ReEval-Flag (A) und löscht Timestamps (AN, AO) für gefundene Einträge. Merkt sich in Spalte AY, wann die Suche durchgeführt wurde. + + Args: + sheet_handler (GoogleSheetHandler): Initialisierte Instanz. + row_limit (int, optional): Maximale Anzahl zu prüfender Zeilen. Defaults to None. + min_employees (int, optional): Mindestanzahl Mitarbeiter (Spalte K) als Filter. Defaults to 500. """ logging.info(f"Starte Modus 'find_wiki_serp': Suche fehlende Wiki-URLs für Firmen > {min_employees} MA...") @@ -351,6 +356,7 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 logging.critical(f"FEHLER beim Holen der Spaltenbuchstaben: {e}") return + # --- HIER WIRD all_sheet_updates definiert --- all_sheet_updates = [] processed_rows = 0 # Zählt Zeilen, für die eine Suche durchgeführt wurde found_urls = 0 # Zählt Zeilen, wo eine URL gefunden wurde @@ -375,6 +381,7 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 continue # Nächste Zeile, diese wurde schon geprüft # --- ENDE NEUE PRÜFUNG --- + # Prüfe, ob Zeile überhaupt verarbeitet werden soll try: # 1. Mitarbeiterzahl prüfen ma_val_str = row[col_indices["K"]] if len(row) > col_indices["K"] else "0" @@ -389,6 +396,7 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 # 2. Prüfen, ob Wiki URL (M) leer oder "k.A." ist m_value = row[col_indices["M"]] if len(row) > col_indices["M"] else "" + # Prüfe auf leer UND 'k.a.' (case-insensitive) if m_value and m_value.strip().lower() != "k.a.": skipped_m_filled_count += 1 continue @@ -401,9 +409,9 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 # --- SerpAPI Suche durchführen --- logging.info(f"Zeile {row_num_in_sheet}: Suche Wiki-URL für '{company_name}' (MA: {ma_val})...") - wiki_url_found = serp_wikipedia_lookup(company_name) + wiki_url_found = serp_wikipedia_lookup(company_name) # Annahme: nutzt logging processed_rows += 1 # Zähle die durchgeführte Suche - time.sleep(1.5) # Pause + time.sleep(1.5) # Pause zwischen SerpAPI-Aufrufen # --- Updates vorbereiten --- # Timestamp AY IMMER setzen, um die Suche zu markieren @@ -424,27 +432,31 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500 # Optional: Marker in M schreiben? Vorerst nicht, AY reicht. # row_updates.append({'range': f'{col_letters["M"]}{row_num_in_sheet}', 'values': [['k.A. (SerpAPI Searched)']]}) + # Füge die Updates für diese Zeile zur Gesamtliste hinzu all_sheet_updates.extend(row_updates) except Exception as e: + # Logge Fehler und fahre mit der nächsten Zeile fort logging.exception(f"Unerwarteter Fehler bei Verarbeitung von Zeile {row_num_in_sheet}: {e}") + continue # Gehe zur nächsten Zeile -# --- Batch Update am Ende --- -if all_sheet_updates: - logging.info(f"Sende Batch-Update für {processed_rows} geprüfte Zeilen ({found_urls} URLs gefunden, {len(all_sheet_updates)} Zellen)...") - success = sheet_handler.batch_update_cells(all_sheet_updates) - if success: - logging.info(f"Sheet-Update für 'find_wiki_serp' erfolgreich.") - # Fehler wird von batch_update_cells geloggt -else: - logging.info("Keine Zeilen gefunden, für die eine SerpAPI Wiki-Suche durchgeführt werden musste/konnte.") + # --- Batch Update am Ende --- + # Dieser Block muss auf derselben Einrückungsebene wie die for-Schleife sein! + if all_sheet_updates: + logging.info(f"Sende Batch-Update für {processed_rows} geprüfte Zeilen ({found_urls} URLs gefunden, {len(all_sheet_updates)} Zellen)...") + success = sheet_handler.batch_update_cells(all_sheet_updates) + if success: + logging.info(f"Sheet-Update für 'find_wiki_serp' erfolgreich.") + # Fehler wird von batch_update_cells geloggt + else: + logging.info("Keine Zeilen gefunden, für die eine SerpAPI Wiki-Suche durchgeführt werden musste/konnte.") -logging.info(f"Modus 'find_wiki_serp' abgeschlossen.") -logging.info(f" Durchgeführte Suchen in diesem Lauf: {processed_rows}") -logging.info(f" Gefundene & eingetragene URLs: {found_urls}") -logging.info(f" Übersprungen (AY bereits gesetzt): {skipped_timestamp_ay}") -logging.info(f" Übersprungen (MA <= {min_employees}): {skipped_employee_count}") -logging.info(f" Übersprungen (M bereits gefüllt): {skipped_m_filled_count}") + logging.info(f"Modus 'find_wiki_serp' abgeschlossen.") + logging.info(f" Durchgeführte Suchen in diesem Lauf: {processed_rows}") + logging.info(f" Gefundene & eingetragene URLs: {found_urls}") + logging.info(f" Übersprungen (AY bereits gesetzt): {skipped_timestamp_ay}") + logging.info(f" Übersprungen (MA <= {min_employees}): {skipped_employee_count}") + logging.info(f" Übersprungen (M bereits gefüllt): {skipped_m_filled_count}") def prepare_data_for_modeling(sheet_handler): """