Man hat Daten auf einer Website gefunden. Man braucht sie in der Datenbank.
Was ist der schnellste Weg von Punkt A nach Punkt B?
Dieser Leitfaden behandelt die praktischen Workflows, um HTML-Tabellen in SQLite, PostgreSQL, MySQL und andere Datenbanken zu bekommen — mit minimalem Aufwand.
Der allgemeine Workflow
Jede Browser-zu-Datenbank-Pipeline hat dieselben Schritte:
- Extrahieren — Die Tabelle aus der Webseite holen
- Bereinigen — Formatierung, Typen und Struktur korrigieren
- Laden — In die Datenbank einfügen
Die Frage ist, wo man jeden Schritt durchführt und mit welchen Tools.
Weg 1: CSV als Zwischenformat
Der gängigste Ansatz. Funktioniert mit jeder Datenbank.
Schritt 1: Als CSV exportieren
Eine Browser-Erweiterung wie HTML Table Exporter verwenden oder kopieren, in eine Tabellenkalkulation einfügen und als CSV speichern.
Wichtige Überlegung: Die Wahl des Trennzeichens. Kommas funktionieren, es sei denn, die Daten enthalten Kommas. Semikolons oder Tabs sind sicherer bei uneinheitlichen Daten.
Schritt 2: In Datenbank laden
SQLite:
sqlite3 mydb.db
.mode csv
.import data.csv tabellenname
Oder mit Headern:
sqlite3 mydb.db <<EOF
.mode csv
.headers on
.import data.csv tabellenname
EOF
PostgreSQL:
COPY tabellenname FROM '/pfad/zu/data.csv'
WITH (FORMAT csv, HEADER true);
Oder mit psql:
\copy tabellenname FROM 'data.csv' WITH (FORMAT csv, HEADER true);
MySQL:
LOAD DATA INFILE '/pfad/zu/data.csv'
INTO TABLE tabellenname
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Vor- und Nachteile
✅ Universelle Kompatibilität
✅ Zwischendatei leicht überprüfbar
✅ Probleme können vor dem Laden manuell behoben werden
❌ Zusätzlicher Schritt
❌ Typinferenz ist einfach
Weg 2: Direkt als SQL-Statements
Die Tabelle direkt als INSERT-Anweisungen exportieren.
Als SQL exportieren
Manche Export-Tools generieren SQL direkt. Die Ausgabe sieht so aus:
INSERT INTO tabellenname (spalte1, spalte2, spalte3) VALUES
('wert1', 'wert2', 123),
('wert4', 'wert5', 456);
Laden
Einfach die SQL-Datei ausführen:
# SQLite
sqlite3 mydb.db < data.sql
# PostgreSQL
psql -d mydb -f data.sql
# MySQL
mysql mydb < data.sql
Vor- und Nachteile
✅ Ein Schritt vom Export zur Datenbank
✅ SQL ist portabel über Datenbanken hinweg (größtenteils)
❌ Große Datensätze = riesige SQL-Dateien
❌ Tabellenschema muss vorher definiert werden
Weg 3: Python + Pandas Pipeline
Maximale Flexibilität. Am besten für wiederholte Importe oder komplexe Bereinigungen.
Kompletter Workflow
import pandas as pd
from sqlalchemy import create_engine
# Schritt 1: CSV laden (aus Browser exportiert)
df = pd.read_csv('data.csv')
# Schritt 2: Bereinigen
df.columns = df.columns.str.lower().str.replace(' ', '_') # Spaltennamen normalisieren
df['datum'] = pd.to_datetime(df['datum']) # Datumsangaben parsen
df['betrag'] = df['betrag'].str.replace('[€,]', '', regex=True).astype(float) # Währung bereinigen
# Schritt 3: In Datenbank laden
engine = create_engine('sqlite:///mydb.db')
# Oder: create_engine('postgresql://user:pass@localhost/mydb')
# Oder: create_engine('mysql+pymysql://user:pass@localhost/mydb')
df.to_sql('tabellenname', engine, if_exists='replace', index=False)
Typ-Mapping
Pandas erkennt Typen automatisch, aber man kann explizit sein:
df.to_sql('tabellenname', engine,
if_exists='replace',
index=False,
dtype={
'id': Integer(),
'name': String(100),
'erstellt_am': DateTime(),
'betrag': Float()
})
Vor- und Nachteile
✅ Volle Kontrolle über Bereinigung und Typen
✅ Verarbeitet komplexe Transformationen
✅ Wiederholbar und skriptfähig
❌ Erfordert Python-Umgebung
❌ Überdimensioniert für einmalige Importe
Weg 4: DuckDB (Die moderne Abkürzung)
DuckDB liest CSV direkt und erledigt die meiste Bereinigung automatisch.
Direkte Abfrage
-- CSV abfragen ohne Import
SELECT * FROM 'data.csv';
-- Mit Typinferenz
SELECT * FROM read_csv_auto('data.csv');
-- Tabelle aus CSV erstellen
CREATE TABLE meine_tabelle AS SELECT * FROM 'data.csv';
Vom Browser zur Abfrage in Sekunden
# Tabelle als CSV aus dem Browser exportieren
# Dann sofort abfragen:
duckdb -c "SELECT spalte1, SUM(spalte2) FROM 'data.csv' GROUP BY spalte1;"
Keine Schema-Definition. Kein Import-Schritt. Einfach abfragen.
Vor- und Nachteile
✅ Schnellster Weg für Ad-hoc-Analysen
✅ Exzellente Typinferenz
✅ SQL-Interface
❌ Keine traditionelle Datenbank (für Persistenz Ergebnisse exportieren)
Häufige Probleme lösen
Spaltennamen mit Leerzeichen
Webtabellen haben oft Header wie „Gesamtumsatz" oder „Laufendes Jahr".
Beim Export beheben: Manche Tools normalisieren Header automatisch.
Beim Import beheben:
df.columns = df.columns.str.replace(' ', '_').str.lower()
Oder in SQL nach dem Import:
ALTER TABLE meine_tabelle RENAME COLUMN "Gesamtumsatz" TO gesamtumsatz;
Gemischte Zahlenformate
Europäisch (1.234,56) vs. US (1,234.56) — unterschiedliche Formate machen Importe kaputt.
Vor dem Import beheben: Ein Tool mit Bereinigungsprofilen verwenden, oder:
# Europäisch zu Standard
df['wert'] = df['wert'].str.replace('.', '').str.replace(',', '.').astype(float)
Null-Darstellungen
Webtabellen zeigen Leerzeichen, „N/A", „—", „-" für fehlende Daten.
df = df.replace(['N/A', '—', '-', ''], pd.NA)
Oder in DuckDB:
SELECT NULLIF(spalte, 'N/A') AS spalte FROM 'data.csv';
Datumsangaben in verschiedenen Formaten
df['datum'] = pd.to_datetime(df['datum'], format='mixed', dayfirst=True)
format='mixed' verarbeitet uneinheitliche Datumsformate in derselben Spalte.
Den richtigen Weg wählen
| Szenario | Empfohlener Weg |
|---|---|
| Einmaliger Import, kleine Tabelle | CSV + direkter Datenbankimport |
| Einmaliger Import, Bereinigung nötig | Python + Pandas |
| Schnelle Analyse, keine Persistenz nötig | DuckDB |
| Regelmäßige Importe aus derselben Quelle | Python-Skript (automatisieren) |
| SQL-Format zum Teilen/Versionieren benötigt | Direkter SQL-Export |
Beispiel: Kompletter Workflow
Angenommen, man hat eine Tabelle mit Produktdaten auf einer Website.
Schritt 1: Mit HTML Table Exporter exportieren → CSV mit bereinigten Zahlen
Schritt 2: Schnelle Validierung in DuckDB:
SELECT COUNT(*), COUNT(DISTINCT produkt_id) FROM 'produkte.csv';
-- Auf Duplikate prüfen
Schritt 3: In PostgreSQL laden:
import pandas as pd
from sqlalchemy import create_engine
df = pd.read_csv('produkte.csv')
engine = create_engine('postgresql://user:pass@localhost/inventory')
df.to_sql('produkte', engine, if_exists='replace', index=False)
Gesamtzeit: 2 Minuten.
Die Meta-Lektion
Der kürzeste Weg ist nicht immer der direkteste.
30 Sekunden für Bereinigung beim Export sparen 10 Minuten beim Debuggen von Importfehlern. Das richtige Zwischenformat (CSV vs. SQL vs. JSON) hängt von der Zieldatenbank und der Datenkomplexität ab.
Für die meisten Webtabelle → Datenbank Workflows:
- Als CSV mit Zahlen-/Datumsbereinigung exportieren
- Mit dem nativen CSV-Import der Datenbank laden
- Python nur einsetzen, wenn komplexe Transformationen nötig sind
Einfache Pipelines sind wartbare Pipelines.
Für Python-Workflows im Detail siehe unseren Leitfaden zu den besten Chrome-Erweiterungen zum Exportieren von Tabellen.
Saubere, datenbankfähige Exporte? Erfahren Sie mehr auf gauchogrid.com/de/html-table-exporter oder probieren Sie HTML Table Exporter kostenlos im Chrome Web Store.
Top comments (0)