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:
@@ -13,7 +13,7 @@ import csv
|
|||||||
|
|
||||||
# ==================== KONFIGURATION ====================
|
# ==================== KONFIGURATION ====================
|
||||||
class Config:
|
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"
|
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"
|
||||||
@@ -143,26 +143,35 @@ def alignment_demo(sheet):
|
|||||||
"Spalte F (Aktuelle Branche)",
|
"Spalte F (Aktuelle Branche)",
|
||||||
"Spalte G (Beschreibung Branche extern)",
|
"Spalte G (Beschreibung Branche extern)",
|
||||||
"Spalte H (Anzahl Techniker CRM)",
|
"Spalte H (Anzahl Techniker CRM)",
|
||||||
"Spalte I (Vorschlag Wiki URL)",
|
"Spalte I (Umsatz CRM)",
|
||||||
"Spalte J (Wikipedia URL)",
|
"Spalte J (Anzahl Mitarbeiter CRM)",
|
||||||
"Spalte K (Wikipedia Absatz)",
|
"Spalte K (Vorschlag Wiki URL)",
|
||||||
"Spalte L (Wikipedia Branche)",
|
"Spalte L (Wikipedia URL)",
|
||||||
"Spalte M (Wikipedia Umsatz)",
|
"Spalte M (Wikipedia Absatz)",
|
||||||
"Spalte N (Wikipedia Mitarbeiter)",
|
"Spalte N (Wikipedia Branche)",
|
||||||
"Spalte O (Wikipedia Kategorien)",
|
"Spalte O (Wikipedia Umsatz)",
|
||||||
"Spalte P (Konsistenzprüfung)",
|
"Spalte P (Wikipedia Mitarbeiter)",
|
||||||
"Spalte Q (Begründung bei Inkonsistenz)",
|
"Spalte Q (Wikipedia Kategorien)",
|
||||||
"Spalte R (Vorschlag Wiki Artikel ChatGPT)",
|
"Spalte R (Konsistenzprüfung)",
|
||||||
"Spalte S (FSM Relevanz Ja / Nein)",
|
"Spalte S (Begründung bei Inkonsistenz)",
|
||||||
"Spalte T (Begründung für FSM Relevanz)",
|
"Spalte T (Vorschlag Wiki Artikel ChatGPT)",
|
||||||
"Spalte U (Schätzung Anzahl Mitarbeiter)",
|
"Spalte U (Begründung bei Abweichung)",
|
||||||
"Spalte V (Begründung bei Abweichung)",
|
"Spalte V (Vorschlag neue Branche)",
|
||||||
"Spalte W (Einschätzung Anzahl Servicetechniker)",
|
"Spalte W (Konsistenzprüfung Branche)",
|
||||||
"Spalte X (Begründung bei Abweichung Anzahl Servicetechniker)",
|
"Spalte X (Begründung Abweichung Branche)",
|
||||||
"Spalte Y (Timestamp letzte Prüfung)",
|
"Spalte Y (FSM Relevanz Ja / Nein)",
|
||||||
"Spalte Z (Version)"
|
"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)
|
sheet.update(values=[new_headers], range_name=header_range)
|
||||||
print("Alignment-Demo abgeschlossen: Neue Spaltenüberschriften in Zeile 11200 geschrieben.")
|
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}")
|
debug_print(f"Fehler beim Extrahieren des ersten Absatzes: {e}")
|
||||||
return "k.A."
|
return "k.A."
|
||||||
def extract_categories(self, soup):
|
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")
|
cat_div = soup.find('div', id="mw-normal-catlinks")
|
||||||
if cat_div:
|
if cat_div:
|
||||||
ul = cat_div.find('ul')
|
ul = cat_div.find('ul')
|
||||||
@@ -359,29 +368,40 @@ class DataProcessor:
|
|||||||
self._process_single_row(i, row)
|
self._process_single_row(i, row)
|
||||||
def _process_single_row(self, row_num, row_data):
|
def _process_single_row(self, row_num, row_data):
|
||||||
# Im neuen Schema: Firmenname in Spalte B (Index 1), Website in Spalte C (Index 2).
|
# Im neuen Schema: Firmenname in Spalte B (Index 1), Website in Spalte C (Index 2).
|
||||||
# Wikipedia-Daten werden in Spalten J bis O geschrieben:
|
# Wikipedia-Daten werden in Spalten K bis Q geschrieben:
|
||||||
# J: Wikipedia URL, K: Wikipedia Absatz, L: Wikipedia Branche, M: Wikipedia Umsatz, N: Wikipedia Mitarbeiter, O: Wikipedia Kategorien.
|
# K: Vorschlag Wiki URL, L: Wikipedia URL, M: Wikipedia Absatz, N: Wikipedia Branche,
|
||||||
# Timestamp (jetzt) in Spalte Y und Version in Spalte Z.
|
# 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 ""
|
company_name = row_data[1] if len(row_data) > 1 else ""
|
||||||
website = row_data[2] if len(row_data) > 2 else ""
|
website = row_data[2] if len(row_data) > 2 else ""
|
||||||
update_range = f"J{row_num}:O{row_num}"
|
update_range = f"K{row_num}:Q{row_num}"
|
||||||
dt_range = f"Y{row_num}"
|
dt_range = f"AH{row_num}"
|
||||||
ver_range = f"Z{row_num}"
|
ver_range = f"AI{row_num}"
|
||||||
print(f"\n[{datetime.now().strftime('%H:%M:%S')}] Verarbeite Zeile {row_num}: {company_name}")
|
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)
|
article = self.wiki_scraper.search_company_article(company_name, website)
|
||||||
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.',
|
company_data = {
|
||||||
'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'categories': 'k.A.', 'full_infobox': 'k.A.'}
|
'url': 'k.A.',
|
||||||
self.sheet_handler.sheet.update(values=[[
|
'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('url', 'k.A.'),
|
||||||
company_data.get('first_paragraph', 'k.A.'),
|
company_data.get('first_paragraph', 'k.A.'),
|
||||||
company_data.get('branche', 'k.A.'),
|
company_data.get('branche', 'k.A.'),
|
||||||
company_data.get('umsatz', 'k.A.'),
|
company_data.get('umsatz', 'k.A.'),
|
||||||
company_data.get('mitarbeiter', 'k.A.'),
|
company_data.get('mitarbeiter', 'k.A.'),
|
||||||
company_data.get('categories', '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")
|
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=[[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)
|
||||||
|
|||||||
Reference in New Issue
Block a user