Flag-Spalte A:
Nur Zeilen mit einem "x" in Spalte A werden verarbeitet.
Verschiebung der Spaltenzuordnungen:
Firmenname in Spalte B, Website in Spalte C.
Ausgabe erfolgt in den Spalten H bis L (H: Wikipedia URL, I: erster Absatz, J: Branche, K: Umsatz in Mio €, L: Mitarbeiterzahl).
Datum und Uhrzeit in Spalte O, Version in Spalte R.
Umsatz-Extraktion:
Erweiterte Regex-Logik zur Erkennung von Tausendertrennzeichen und zur Umrechnung in Mio €.
Mitarbeiterextraktion:
Umstellung auf re.findall, um robust das erste Zahlenfragment zu erfassen.
Weitere Anpassungen:
Deprecation-Warnings bei den Update-Aufrufen wurden behoben (mittels benannter Argumente).
Zusammenfassung:
Spaltenreihenfolge aktualisiert:
G: Wikipedia URL
H: Erster Absatz des Wikipedia-Artikels
I: Branche (aus der Infobox)
J: Umsatz (als Zahl in Mio €, z. B. "159")
K: Anzahl Mitarbeiter (aus der Infobox)
N: Datum und aktuelle Zeit
Q: Version
Umsatz-Extraktion:
Regex erkennt jetzt "Mio"/"Millionen" und "Mrd"/"Milliarden".
Ist keine Einheit vorhanden, wird der Wert in Euro in Mio € umgerechnet (Division durch 1.000.000).
Mitarbeiterzahl-Extraktion:
Regex wurde erweitert, um Zahlen mit Leerzeichen zu erfassen.
Zusätzliche Schlüsselwörter wie "Mitarbeiterzahl" werden berücksichtigt.
Deprecation-Warnings:
Die Update-Aufrufe für Google Sheets wurden so angepasst, dass die Werte vor dem Range-Namen übergeben werden.
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).
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)
Entfernung der kompletten Infobox-Ausgabe.
Extraktion des ersten Absatzes: Neue Methode extract_first_paragraph liefert den ersten sinnvollen Absatz.
Erweiterung der Infobox-Extraktion: Jetzt werden zusätzlich "Mitarbeiter" aus der Infobox extrahiert.
Umsatz-Formatierung: Umsatz wird als reine Zahl (in Mio €) ausgegeben.
Google Sheet Update: Aktualisierung erfolgt nun auf Spalte G bis K (5 Spalten).
Vollständige Domain-Extraktion:
Implementiert über die neue Methode _get_full_domain, die nun den kompletten Domainnamen (inklusive TLD) liefert (z. B. "heimbach.com").
Normalisierung der Firmennamen:
Einführung der Funktion normalize_company_name, welche gängige Firmierungsformen (z. B. GmbH, AG, Aktiengesellschaft, Co. KG, mbH, & Co. KG, e.V., Limited, Ltd, Inc, Corp, Corporation, Gruppe) entfernt. Dies führt zu einem konsistenten Vergleich zwischen den Unternehmensdaten und Wikipedia-Titeln.
Verbesserte Artikelvalidierung:
In _validate_article werden nun:
Infobox-Links sowie externe Links geprüft, ob sie den vollständigen Domainnamen enthalten (ohne Dateilinks).
Der Vergleich der Wikipedia-Titel und des Firmennamens erfolgt auf Basis der normalisierten Namen.
Ein dynamischer Schwellenwert wird verwendet (0.60 statt 0.65), wenn ein definitiver Link-Match gefunden wurde.
Infobox-Links als definitiver Beleg:
In der Methode _validate_article wird nun die Infobox des Wikipedia-Artikels nach externen Links durchsucht. Wird der Domain-Key (extrahiert aus der URL) in einem dieser Links gefunden, wird der Artikel ohne weiteren Ähnlichkeitsvergleich als korrekt akzeptiert.
Optimierte Suchbegriff-Generierung:
Die Funktion _generate_search_terms nutzt nun zuerst den Domain-Key, dann die ersten zwei Wörter des Firmennamens und zuletzt den vollständigen Namen, um die relevantesten Treffer zu erzielen.
Weitere kleinere Verbesserungen:
Debug-Log-Ausgaben wurden angepasst, um den Such- und Validierungsprozess besser nachvollziehen zu können.
Optimierte Suchbegriffe:
– Es werden nur der original Firmenname, seine ersten zwei Wörter und der Domain-Key (erstes Segment der URL) genutzt.
– So werden irrelevante Begriffe wie „www“ vermieden.
Validierung:
– Vor Akzeptanz eines Artikels wird geprüft, ob der Domain-Key im HTML vorkommt und der Titel des Artikels eine ausreichende Ähnlichkeit zum Firmennamen aufweist.
Struktur:
– Der Code ist in einer neuen Datei namens anpassungen.py zusammengefasst und einsatzbereit.
URL-Normalisierung:
Die Methode _normalize_domain entfernt nun explizit Protokoll und „www“, sodass z. B. aus „www.heilemann-leo.de“ einfach „heilemann-leo.de“ wird.
Suchlogik:
In _generate_search_terms wird zuerst der normalisierte Domainname verwendet. Erst danach kommen der bereinigte Firmenname und ergänzende Begriffe. So wird irrelevanter Suchbegriff wie „www“ vermieden.
Validierung:
Die Artikel werden auf ihre Relevanz (unter anderem mittels Ähnlichkeitsvergleich) geprüft, sodass nur Artikel mit ausreichend hoher Ähnlichkeit akzeptiert werden.
GoogleSheetHandler: Der Update-Bereich wurde auf G{row_num}:R{row_num} erweitert, um 12 Spalten zu umfassen.
WikipediaScraper:
Die Methode extract_full_infobox holt den gesamten Infobox-Text mit | als Trenner.
Mit extract_fields_from_infobox_text werden gezielt die Felder "Branche" und "Umsatz" gesucht.
In extract_company_data wird zuerst versucht, die Werte aus dem kompletten Infobox-Text zu extrahieren, bevor der Fallback genutzt wird.
DataProcessor: Die Ausgabe im Sheet umfasst nun als erste Spalte den gesamten Infobox-Text.
Vollständige Implementierung der _extract_infobox_value-Methode
Erweiterte Schlüsselwörter für deutsche Infoboxen
Verbesserte Textbereinigung für Branchenangaben
Toleranz für verschiedene Zahlenformate
Debug-Output für jeden Verarbeitungsschritt
Erklärung der Verbesserungen für Heine Optotechnik:
Erweiterte Header-Erkennung:
python
Copy
if any(kw in header_text for kw in keywords):
Erkennt jetzt auch "Tätigkeitsfeld" und "Aktivitäten"
Branchenbereinigung:
python
Copy
value = re.sub(r'\(.*?\)', '', value)
Entfernt Klammerzusätze wie "(seit 2020)"
Flexiblere Infobox-Erkennung:
python
Copy
infobox = soup.find('table', {'class': lambda c: c and 'infobox' in c.lower()})
Findet auch nicht-standardisierte Infobox-Klassen
Debug-Output:
python
Copy
debug_print(f"Prüfe Header: {header_text}")
Zeigt alle untersuchten Header an
Erweiterte Infobox-Erkennung:
Unterstützt jetzt zusätzliche Klassen wie firma und unternehmensdaten
Berücksichtigt div-Elemente neben Tabellenzeilen
Verbesserte Schlüsselwörter:
50% mehr Keywords für Branchen- und Umsatzfelder
Berücksichtigt typisch deutsche Formulierungen
Flexible Wertextraktion:
Verarbeitet Listen (<li>-Elemente)
Ignoriert Navigationsboxen (navbox-Klasse)
Sucht in verschiedenen HTML-Elementen (div, td, th)
Robuste Umsatzanalyse:
Erkennt verschiedene Schreibweisen:
"123,45 Mio. €"
"1.234,56 Millionen Euro"
"5,6 Mrd. USD"
Führt automatische Umrechnung durch:
1 Milliarde → 1000 Millionen
Standardisiert die Ausgabe auf "X.X Mio €"
Erweiterte Debug-Informationen:
Protokolliert fehlgeschlagene Suchvorgänge
Zeigt erkannte Werte im Rohformat an
Fehlende Methode hinzugefügt:
python
Copy
def _extract_domain_hint(self, website):
# Implementierung der Domain-Extraktion
Verbesserte Namensbereinigung:
Behandelt jetzt Sonderfälle wie "GmbH & Co. KG"
Entfernt Sonderzeichen vor dem Ähnlichkeitsvergleich
Optimierte Suchbegriffe-Generierung:
Splittet Namen in relevante Wörter
Entfernt Duplikate aus den Suchbegriffen
Detaillierteres Debugging:
Zeigt Ähnlichkeitswerte an
Protokolliert Domain-Prüfungen
Klare Trennung der Verantwortlichkeiten:
GoogleSheetHandler: Alle Sheet-Interaktionen
WikipediaScraper: Suchlogik und Datenextraktion
DataProcessor: Steuerung des Gesamtflusses
Erweiterte Funktionalitäten:
Retry-Decorator für robustere API-Aufrufe
Verbesserte Validierung der Artikelrelevanz
Flexiblere Suchbegriff-Generierung
Zentrale Konfiguration
Dokumentation:
Ausführliche Docstrings für alle Methoden
Kommentare für komplexe Codeabschnitte
Klare Parameternamen
Wartbarkeit:
Einfache Erweiterung durch modularen Aufbau
Separierte Geschäftslogik von der Implementierung
Konsistente Fehlerbehandlung
Die ChatGPT-Bewertung (Teil 3) kann später als separate Klasse hinzugefügt werden, ohne die bestehende Struktur zu beeinflussen.
Hauptverbesserungen im überarbeiteten Code
Deutlich robustere Infobox-Erkennung:
Erweiterte Suche nach Infobox-Tabellen mit mehreren möglichen Klassen
Berücksichtigung verschiedener Schreibweisen und Varianten für "Branche" und "Umsatz"
Drei-Methoden-Ansatz zur Datenextraktion:
Methode 1: Direkte Suche in den Tabellenzeilen der Infobox
Methode 2: Volltext-Suche nach spezifischen Mustern mit regulären Ausdrücken
Methode 3: Suche in meta-Tags für zusätzliche Kontextinformationen
Intelligentere Firmennamen-Verarbeitung:
Entfernung von Rechtsformen (GmbH, AG, etc.) für bessere Suchtreffer
Extraktion von Kernname für alternative Suche
Wiederverwendung bestehender URLs:
Der Code prüft jetzt zuerst eine bestehende Wikipedia-URL, bevor er eine neue Suche startet
Reduziert unnötige Suchanfragen und verbessert die Konsistenz
Detaillierter Debug-Modus:
Ausführliches Logging für eine bessere Nachvollziehbarkeit
Anzeige von gefundenen Headers in der Infobox für Diagnose-Zwecke
Verbesserte Umsatzextaktion:
Reguläre Ausdrücke für Währungs- und Zahlenformate
Berücksichtigung verschiedener Formate (€, EUR, Mio., Mrd., etc.)
Deutlich bessere Datenbereinigung:
Umfangreichere Textbereinigung von HTML-Entitäten
Sicherer Umgang mit unterschiedlichen Datentypen
Diese Änderungen sollten die Probleme bei der Heimbach-Gruppe und ähnlichen Unternehmen beheben, bei denen die Daten trotz gefundenem Wikipedia-Artikel nicht korrekt extrahiert wurden.
Der DEBUG-Modus hilft zusätzlich dabei, die genauen Vorgänge nachzuvollziehen und bei zukünftigen Problemen gezielter zu diagnostizieren.
Key Improvements
Better HTML Parsing: I've replaced the XPath-based extraction with BeautifulSoup, which is more robust for parsing HTML content.
Improved Infobox Detection: The code now properly identifies and extracts data from Wikipedia infoboxes using a more flexible approach:
It looks for various synonyms of "Branche" and "Umsatz" in the header text
It handles different formats of these values within the infobox
Text Cleaning: Added a clean_text() function to:
Remove HTML tags and entities
Strip out references (text in square brackets)
Remove parenthetical text that might contain irrelevant information
Handle whitespace issues
Better Error Handling: The code now includes more robust error handling:
Multiple retries for Wikipedia data fetching
Proper exception handling with informative error messages
Fallback to existing values if new data can't be obtained
Domain Filtering: Improved the domain key extraction to ignore common subdomains like "www", "de", or "com".
Data Preservation: The code now preserves existing data in the sheet when new data can't be found, rather than overwriting with "k.A."
Better Logging: Added more detailed logging to help with debugging and tracking the progress of the script.
This improved version should more reliably extract industry and revenue information from Wikipedia articles and update your Google Sheet accordingly.
Wikipedia-Suche prüft jetzt explizit auf Namensähnlichkeit via SequenceMatcher.
Einträge ohne passenden Domainbezug oder ähnlichen Namen werden übersprungen.
Robustere Extraktion von Branche/Umsatz via lxml-XPath.
Versionierung korrekt in Spalte Q ausgegeben.
- Lese gezielt mit lxml und XPath aus der Infobox
- Prüfe Namensähnlichkeit und URL-Fit vor der Extraktion
- Ausgabe von Branche/Umsatz nur bei sicherem Treffer
- reverted to earlier reliable search strategy
- restored infobox-first extraction
- ensured fallback to categories only if infobox branch is missing
- maintained timestamp and version output
- XPath entfernt, da BeautifulSoup in Kombination mit Infobox-Selektor zuverlässiger
- Nur Branchen aus Infobox erlaubt, Kategorien nur als Fallback entfernt
- Verbesserte Ausgabe: Nur bei gefundenem Wikipedia-Link werden Werte eingetragen
- Versionskennung 1.0.6 eingeführt (Spalte Q)
- Stellt wieder bewährte BeautifulSoup-basierte Infobox-Suche her
- Verbesserte Titelvalidierung durch Namenssplit und Substring-Matching
- Umsatz-Parsing via Regex auf deutsche Formatierung optimiert
- Fallback auf Kategorien nur bei fehlender Infobox
- Versionierung (z. B. 1.0.9-wiki-refined) wird nun in Spalte Q mitgeschrieben
Korrektes XPath mit normalize-space() zur besseren Erkennung von Branche/Umsatz
Bessere Trefferqualität durch Score-Gewichtung (Namensähnlichkeit + Domain)
Kein Rückfall mehr auf Kategorien bei fehlender Infobox
Spalte Q enthält nun die Versionsnummer
- Domain-Key-Extraktion zur besseren Treffererkennung
- Scoring-Mechanismus zur Auswahl des besten Wikipedia-Artikels
- Erweiterter Infobox-Parser mit Label-Synonymen
- Validierung durch Titel-, Inhalts-, Domain- und Ähnlichkeitsprüfung
- Versionierung der Ergebnisse mit Spaltenausgabe
- Wieder eingeführt: Kombination aus vollständigem Firmennamen, ersten zwei Wörtern und Domain-Fragment zur Suche
- Erhöhte Trefferwahrscheinlichkeit durch Titel-, Inhalts-, Domain- und Ähnlichkeitsprüfung
- Info aus Infobox (Branche & Umsatz) wird bevorzugt; Kategorien nur als Fallback
- Version in Spalte Q geschrieben zur Nachverfolgbarkeit
🧠 Refactoring: Einführung einer globalen VERSION-Konstante (1.0.0-wiki-only)
📅 Feature: Zeitstempel und Version werden nun zusätzlich in Google Sheet eingetragen
🛠️ Fix: sheet.update() erweitert, um die neue Spalte Q (Version) zu berücksichtigen
✨ Struktur: Code durchgängig vereinheitlicht und robuster gegen Fehler gemacht
- Titelprüfung ergänzt: Namensfragmente müssen im Seitentitel vorkommen
- Validierungsmethode erweitert: Kombiniert Titel- und Inhaltsprüfung
- Präzisere Ergebnis-Auswahl durch Matching-Score
- Blacklist bewusst NICHT verwendet
- Leere oder fehlerhafte Wikipedia-Ergebnisse werden sicher erkannt und mit "k.A." ausgegeben
Wikipedia-Validierung über validate_wikipedia_page ergänzt (stellt sicher, dass Seiteninhalt oder Domain zum Firmennamen passen).
Fallback-Parsing parse_infobox_with_fallback() eingebaut für robustere Extraktion von Branche/Umsatz.
Branchenbegriff-Erkennung verbessert (Synonyme wie „Tätigkeitsfeld“, „Industriezweig“ etc.).
Bedingte Auswertung verbessert: Wenn kein Wikipedia-Link → "k.A." für Branche/Umsatz.
Selektor-basierte Extraktion entfernt, da sie fehleranfällig war → durch flexible Infobox-Logik ersetzt.
Selektor-basierte Extraktion für Branche und Umsatz ergänzt (parse_infobox_with_selector).
Fallback auf k.A. wenn Selektor nicht vorhanden ist.
get_wikipedia_data nutzt nun ausschließlich parse_infobox_with_selector für konsistente Ergebnisse.
Ausgabe an Google Sheet unverändert.
GPT-Teil wurde temporär entfernt, wie besprochen.
Aufteilung des Codes in zwei unabhängige Verarbeitungsschritte.
Wikipedia-Branche und Umsatz werden nur geschrieben, wenn Wikipedia-URL vorhanden ist.
GPT-Aufruf überarbeitet (inkl. Timeout und Retry-Logik).
gpt_antworten_log.csv wird mit Zeitstempel aktualisiert.