DEV Community

Cover image for Web Scraping vs. Browser-Extensions – Wann welches Tool für die Datenextraktion?
circobit
circobit

Posted on

Web Scraping vs. Browser-Extensions – Wann welches Tool für die Datenextraktion?

Sie brauchen Daten von einer Website. Schreiben Sie einen Python-Scraper? Starten Sie Playwright? Nutzen Sie eine Browser-Erweiterung? Nach der Datenextraktion von Hunderten verschiedener Websites habe ich ein Framework für die Wahl des richtigen Tools entwickelt.

Die Optionen

Ansatz Läuft JS-fähig Login-Unterstützung Setup-Zeit
Python + requests Server Manuelle Cookies 5 Min
Python + BeautifulSoup Server Manuelle Cookies 5 Min
Playwright/Puppeteer Server Skriptbar 15 Min
Browser-Erweiterung Browser des Nutzers Automatisch 0 Min
Copy-Paste Browser des Nutzers Automatisch 0 Min

Jeder Ansatz hat Vor- und Nachteile. Schauen wir sie uns im Detail an.

Option 1: Python + Requests/BeautifulSoup

Am besten für: Statische HTML-Seiten, APIs, automatisierte Pipelines

import requests
from bs4 import BeautifulSoup

response = requests.get("https://example.com/data")
soup = BeautifulSoup(response.text, "html.parser")

table = soup.find("table")
rows = []
for tr in table.find_all("tr"):
    row = [td.get_text(strip=True) for td in tr.find_all(["td", "th"])]
    rows.append(row)
Enter fullscreen mode Exit fullscreen mode

Vorteile:

  • Schnelle Ausführung
  • Einfach planbar (cron, Airflow)
  • Kein Browser-Overhead

Einschränkungen:

  • Führt kein JavaScript aus
  • Viele moderne Websites rendern Tabellen clientseitig
  • Authentifizierung erfordert manuelles Cookie-Handling

Wann es scheitert: Versuchen Sie, ein React-basiertes Dashboard zu scrapen. Das HTML, das Sie erhalten, ist ein leeres <div id="root"></div>.

Option 2: Headless Browser (Playwright/Puppeteer)

Am besten für: JavaScript-gerenderte Seiten, automatisierte Pipelines, Seiten die Interaktion erfordern

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/dashboard');

  // Warten bis die Tabelle gerendert ist
  await page.waitForSelector('table');

  const data = await page.evaluate(() => {
    const table = document.querySelector('table');
    return Array.from(table.rows).map(row =>
      Array.from(row.cells).map(cell => cell.textContent.trim())
    );
  });

  console.log(data);
  await browser.close();
})();
Enter fullscreen mode Exit fullscreen mode

Vorteile:

  • Führt JavaScript aus
  • Kann mit Seiten interagieren (Klicks, Scrollen, Formulare)
  • Skriptbare Authentifizierungs-Flows

Einschränkungen:

  • Langsamer als direktes HTTP
  • Ressourcenintensiv (Speicher, CPU)
  • Komplexeres Error-Handling
  • Websites können Headless-Browser erkennen

Wann es scheitert: Viele Websites erkennen Puppeteer/Playwright über Navigator-Eigenschaften, WebGL-Fingerprinting oder Verhaltensanalyse. Stealth-Plugins helfen, sind aber nicht narrensicher.

Option 3: Browser-Erweiterungen

Am besten für: Ad-hoc-Extraktion, authentifizierte Websites, nutzergesteuerte Workflows

Eine Browser-Erweiterung läuft in der tatsächlichen Browser-Sitzung des Nutzers, mit vollem Zugriff auf:

  • Authentifizierte Sitzungen
  • JavaScript-gerenderte Inhalte
  • Exakt das DOM, das der Nutzer sieht

Einen Vergleich der besten Optionen finden Sie unter Die 5 besten Chrome-Erweiterungen zum Exportieren von Tabellen (2026).

// Content-Script in einer Chrome-Erweiterung
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg.type === "EXTRACT_TABLE") {
    const table = document.querySelector("table");
    const data = Array.from(table.rows).map(row =>
      Array.from(row.cells).map(cell => cell.textContent.trim())
    );
    sendResponse({ data });
  }
});
Enter fullscreen mode Exit fullscreen mode

Vorteile:

  • Null Authentifizierungs-Aufwand – Sie sind bereits eingeloggt
  • Sieht genau das, was Sie sehen (keine JS-Rendering-Probleme)
  • Funktioniert auf jeder Website (keine Bot-Erkennung)
  • Keine Server-Infrastruktur nötig

Einschränkungen:

  • Erfordert manuelle Auslösung (Nutzer klickt)
  • Kann nicht zeitgesteuert laufen
  • Auf den Browser-Kontext beschränkt

Wann es scheitert: Sie müssen Daten von 10.000 Seiten automatisch extrahieren. Erweiterungen sind für nutzergesteuerte Workflows, nicht für Batch-Verarbeitung.

Entscheidungs-Framework

Python + requests verwenden, wenn:

  • ✅ Die Seite servergerendertes HTML liefert
  • ✅ Sie automatisierte/geplante Extraktion brauchen
  • ✅ Sie eine Datenpipeline aufbauen
  • ✅ Die Authentifizierung über API-Schlüssel oder einfache Cookies läuft

Playwright/Puppeteer verwenden, wenn:

  • ✅ Die Seite JavaScript-Rendering erfordert
  • ✅ Sie automatisierte/geplante Extraktion brauchen
  • ✅ Sie interagieren müssen (scrollen, klicken, paginieren)
  • ✅ Sie Bot-Erkennungs-Gegenmaßnahmen handhaben können

Eine Browser-Erweiterung verwenden, wenn:

  • ✅ Sie bereits auf der Website eingeloggt sind
  • ✅ Sie Daten gelegentlich brauchen (nicht automatisiert)
  • ✅ Die Website starke Bot-Erkennung hat
  • ✅ Sie Daten JETZT wollen, ohne Code zu schreiben

Einfach Copy-Paste, wenn:

  • ✅ Einmalige Extraktion
  • ✅ Einfache Tabellenstruktur
  • ✅ Kein bestimmtes Format nötig

Praxisbeispiele

Beispiel 1: Wikipedia-Tabellen

Bester Ansatz: Browser-Erweiterung oder Python

Wikipedia liefert servergerendertes HTML ohne Authentifizierung. Python funktioniert einwandfrei:

import pandas as pd

url = "https://de.wikipedia.org/wiki/Liste_der_Staaten_der_Erde"
tables = pd.read_html(url)
df = tables[0]
Enter fullscreen mode Exit fullscreen mode

Aber Wikipedia-Tabellen haben oft komplexe Rowspans und Navigationszeilen. Eine spezialisierte Erweiterung behandelt diese automatisch.

Eine Schritt-für-Schritt-Anleitung finden Sie unter Alle Zeilen einer paginierten Webtabelle exportieren.

Beispiel 2: Finanz-Dashboard (hinter Login)

Bester Ansatz: Browser-Erweiterung

Ihr Broker zeigt Portfoliodaten nach dem Login an. Optionen:

  1. Python: Den Authentifizierungs-Flow reverse-engineeren, 2FA handhaben, Session-Cookies pflegen. Möglich, aber fragil.

  2. Playwright: Den Login skripten, 2FA-Prompts behandeln, zu den Daten navigieren. Funktioniert, aber komplex.

  3. Erweiterung: Normal einloggen, „Tabelle exportieren" klicken. Fertig.

Für gelegentliche Exporte gewinnt die Erweiterung bei der Zeit bis zur Datenbereitstellung.

Beispiel 3: Tägliches Preis-Monitoring (1000 Seiten)

Bester Ansatz: Playwright + Queue

Sie müssen täglich Preise auf 1000 Produktseiten prüfen. Das erfordert:

// Pseudocode für Batch-Extraktion
const urls = loadUrlsFromDatabase();

for (const url of urls) {
  const page = await browser.newPage();
  await page.goto(url);
  await page.waitForSelector('.price');

  const price = await page.evaluate(() =>
    document.querySelector('.price').textContent
  );

  await saveToDatabase(url, price);
  await page.close();

  // Rate-Limiting
  await sleep(randomBetween(1000, 3000));
}
Enter fullscreen mode Exit fullscreen mode

Erweiterungen können das nicht – sie erfordern Nutzerinteraktion. Playwright ist das richtige Tool.

Beispiel 4: Einmalige Sport-Statistiken exportieren

Bester Ansatz: Browser-Erweiterung

FBRef hat komplexe zweistufige Überschriften. Sie brauchen die Statistiken dieser Saison einmal.

Python-Ansatz: 30 Minuten, um einen eigenen Parser für deren Tabellenstruktur zu schreiben.

Erweiterungs-Ansatz: Export klicken. 10 Sekunden.

Für einmalige Extraktion nicht über-engineeren.

Hybride Ansätze

Manchmal braucht man beides:

  1. Erweiterung nutzen, um Authentifizierungs-Cookies zu exportieren

    • Cookies aus einer eingeloggten Sitzung exportieren
    • In Python/Playwright für Automatisierung importieren
  2. Erweiterung zum Inspizieren der Struktur, Python zum Skalieren

    • DOM mit den Erweiterungs-Tools manuell untersuchen
    • Einen gezielten Scraper schreiben, sobald man die Struktur versteht
  3. Playwright für Navigation, Erweiterung für Extraktion

    • Skript navigiert zur Seite
    • Ruft die Erweiterungs-API für komplexes Tabellen-Parsing auf

Mein Stack

Für die 80 % der Fälle, in denen ich Web-Tabellendaten brauche:

  • Einmalig, authentifiziert: HTML Table Exporter (Browser-Erweiterung, die ich gebaut habe)
  • Einmalig, öffentliche Daten: pd.read_html() oder Erweiterung
  • Automatisierte Pipeline: Playwright mit eigenen Parsern
  • API verfügbar: Direkte API-Aufrufe (immer bevorzugt)

Das beste Tool hängt von der konkreten Extraktion ab. Passen Sie die Komplexität Ihrer Lösung an die Komplexität Ihres Problems an.


Was ist Ihr bevorzugter Extraktions-Ansatz? Mehr erfahren auf gauchogrid.com/de/html-table-exporter oder die Erweiterung kostenlos im Chrome Web Store testen.

Top comments (0)