v1.2.3: Updated alignment demo and extraction ranges per new schema (K:Q for Wiki data, AH for Times

Zusammenfassung der Änderungen (v1.2.2 → v1.2.3)
Neues Spaltenschema:
Die neue Spaltenzuordnung wurde gemäß der CSV-Vorlage umgesetzt. Die relevanten Felder aus Wikipedia werden jetzt in:

Spalte K: Vorschlag Wiki URL (Platzhalter "k.A.")

Spalte L: Wikipedia URL

Spalte M: Wikipedia Absatz

Spalte N: Wikipedia Branche

Spalte O: Wikipedia Umsatz

Spalte P: Wikipedia Mitarbeiter

Spalte Q: Wikipedia Kategorien
geschrieben.

Timestamp & Version:
Der Timestamp wird in Spalte AH und die Version in Spalte AI aktualisiert.

Alignment-Demo:
Der Alignment-Demo-Modus (Option 3) schreibt nun die neuen Spaltenüberschriften in den Range A11200:AI11200 (34 Spalten entsprechend dem neuen Schema).
This commit is contained in:
2025-04-01 16:30:03 +00:00
parent 8e13b5a345
commit 422fad4952

View File

@@ -13,7 +13,7 @@ import csv
# ==================== KONFIGURATION ====================
class Config:
VERSION = "v1.2.2" # v1.2.2: Neue Spaltenzuordnung & Wikipedia-Kategorien extrahieren
VERSION = "v1.2.3" # v1.2.3: Neue Spaltenzuordnung gemäß dem neuen Schema, Wikipedia-Kategorien extrahieren
LANG = "de"
CREDENTIALS_FILE = "service_account.json"
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
@@ -143,26 +143,35 @@ def alignment_demo(sheet):
"Spalte F (Aktuelle Branche)",
"Spalte G (Beschreibung Branche extern)",
"Spalte H (Anzahl Techniker CRM)",
"Spalte I (Vorschlag Wiki URL)",
"Spalte J (Wikipedia URL)",
"Spalte K (Wikipedia Absatz)",
"Spalte L (Wikipedia Branche)",
"Spalte M (Wikipedia Umsatz)",
"Spalte N (Wikipedia Mitarbeiter)",
"Spalte O (Wikipedia Kategorien)",
"Spalte P (Konsistenzprüfung)",
"Spalte Q (Begründung bei Inkonsistenz)",
"Spalte R (Vorschlag Wiki Artikel ChatGPT)",
"Spalte S (FSM Relevanz Ja / Nein)",
"Spalte T (Begründung für FSM Relevanz)",
"Spalte U (Schätzung Anzahl Mitarbeiter)",
"Spalte V (Begründung bei Abweichung)",
"Spalte W (Einschätzung Anzahl Servicetechniker)",
"Spalte X (Begründung bei Abweichung Anzahl Servicetechniker)",
"Spalte Y (Timestamp letzte Prüfung)",
"Spalte Z (Version)"
"Spalte I (Umsatz CRM)",
"Spalte J (Anzahl Mitarbeiter CRM)",
"Spalte K (Vorschlag Wiki URL)",
"Spalte L (Wikipedia URL)",
"Spalte M (Wikipedia Absatz)",
"Spalte N (Wikipedia Branche)",
"Spalte O (Wikipedia Umsatz)",
"Spalte P (Wikipedia Mitarbeiter)",
"Spalte Q (Wikipedia Kategorien)",
"Spalte R (Konsistenzprüfung)",
"Spalte S (Begründung bei Inkonsistenz)",
"Spalte T (Vorschlag Wiki Artikel ChatGPT)",
"Spalte U (Begründung bei Abweichung)",
"Spalte V (Vorschlag neue Branche)",
"Spalte W (Konsistenzprüfung Branche)",
"Spalte X (Begründung Abweichung Branche)",
"Spalte Y (FSM Relevanz Ja / Nein)",
"Spalte Z (Begründung für FSM Relevanz)",
"Spalte AA (Schätzung Anzahl Mitarbeiter)",
"Spalte AB (Konsistenzprüfung Mitarbeiterzahl)",
"Spalte AC (Begründung für Abweichung Mitarbeiterzahl)",
"Spalte AD (Einschätzung Anzahl Servicetechniker)",
"Spalte AE (Begründung bei Abweichung Anzahl Servicetechniker)",
"Spalte AF (Schätzung Umsatz ChatGPT)",
"Spalte AG (Begründung für Abweichung Umsatz)",
"Spalte AH (Timestamp letzte Prüfung)",
"Spalte AI (Version)"
]
header_range = "A11200:Z11200"
header_range = "A11200:AI11200" # 35 Spalten: A bis AI
sheet.update(values=[new_headers], range_name=header_range)
print("Alignment-Demo abgeschlossen: Neue Spaltenüberschriften in Zeile 11200 geschrieben.")
@@ -236,7 +245,7 @@ class WikipediaScraper:
debug_print(f"Fehler beim Extrahieren des ersten Absatzes: {e}")
return "k.A."
def extract_categories(self, soup):
"""Extrahiert Wikipedia-Kategorien als kommagetrennte Liste."""
"""Extrahiert Wikipedia-Kategorien als kommagetrennten String."""
cat_div = soup.find('div', id="mw-normal-catlinks")
if cat_div:
ul = cat_div.find('ul')
@@ -359,29 +368,40 @@ class DataProcessor:
self._process_single_row(i, row)
def _process_single_row(self, row_num, row_data):
# Im neuen Schema: Firmenname in Spalte B (Index 1), Website in Spalte C (Index 2).
# Wikipedia-Daten werden in Spalten J bis O geschrieben:
# J: Wikipedia URL, K: Wikipedia Absatz, L: Wikipedia Branche, M: Wikipedia Umsatz, N: Wikipedia Mitarbeiter, O: Wikipedia Kategorien.
# Timestamp (jetzt) in Spalte Y und Version in Spalte Z.
# Wikipedia-Daten werden in Spalten K bis Q geschrieben:
# K: Vorschlag Wiki URL, L: Wikipedia URL, M: Wikipedia Absatz, N: Wikipedia Branche,
# O: Wikipedia Umsatz, P: Wikipedia Mitarbeiter, Q: Wikipedia Kategorien.
# Timestamp (jetzt) in Spalte AH, Version in Spalte AI.
company_name = row_data[1] if len(row_data) > 1 else ""
website = row_data[2] if len(row_data) > 2 else ""
update_range = f"J{row_num}:O{row_num}"
dt_range = f"Y{row_num}"
ver_range = f"Z{row_num}"
update_range = f"K{row_num}:Q{row_num}"
dt_range = f"AH{row_num}"
ver_range = f"AI{row_num}"
print(f"\n[{datetime.now().strftime('%H:%M:%S')}] Verarbeite Zeile {row_num}: {company_name}")
article = self.wiki_scraper.search_company_article(company_name, website)
if article:
company_data = self.wiki_scraper.extract_company_data(article.url)
else:
company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'categories': 'k.A.', 'full_infobox': 'k.A.'}
self.sheet_handler.sheet.update(values=[[
company_data = {
'url': 'k.A.',
'first_paragraph': 'k.A.',
'branche': 'k.A.',
'umsatz': 'k.A.',
'mitarbeiter': 'k.A.',
'categories': 'k.A.',
'full_infobox': 'k.A.'
}
# Für Vorschlag Wiki URL setzen wir zunächst "k.A." als Platzhalter.
values = [
"k.A.", # Vorschlag Wiki URL
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.'),
company_data.get('categories', 'k.A.')
]], range_name=update_range)
]
self.sheet_handler.sheet.update(values=[values], range_name=update_range)
current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range)
self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range)