Open Source ist der Ort, an dem Web Scraping wirklich lebt. Die Tools zum Abrufen von Seiten, Parsen von Markup und Steuern von Browsern sind überwiegend kostenlose, von der Community gepflegte Projekte, und die besten davon wurden im Laufe vieler Jahre von Millionen echter Scraper gehärtet. Sie können den Code lesen, Issues melden, einzelne Teile austauschen und für die Parsing-Schicht nie eine Lizenzgebühr zahlen. Diese Offenheit ist auch der Grund, warum sich das Feld schnell bewegt: die Aufstellung von 2018 ist nicht dieselbe wie die von heute.
Diese Übersicht stellt acht Open-Source-Scraping-Bibliotheken vor, die den Großteil der realen Arbeit heute abdecken, über Python, JavaScript und die Browser-Automatisierungsschicht darüber. Für jede erfahren Sie, was sie ist, in welcher Sprache sie lebt, was sie besonders gut kann und wann Sie zu ihr greifen sollten, mit einem kurzen Code-Snippet dort, wo eine Zeile Code schneller erklärt als ein Absatz. Eine Übersichtstabelle am Ende ordnet jede Bibliothek der Aufgabe zu, für die sie steht, damit Sie den richtigen Stack zusammenstellen können, anstatt das zu verwenden, was Sie zuletzt benutzt haben.
Warum Open Source für Scraping?
Scraping ist selten ein einzelnes Tool. Sie wählen einen Fetcher zum Abrufen von HTML, einen Parser zum Extrahieren von Daten daraus und (wenn die Seite erst nach dem Ausführen von JavaScript existiert) eine Browser-Automatisierungsschicht zum Rendern. Open-Source-Bibliotheken füllen jeden dieser Slots, und da sie modular sind, können Sie sie frei kombinieren: einen Python-Fetcher mit einem Python-Parser, oder einen Node-Browser-Treiber, der eine schlanke DOM-Bibliothek speist. Das Ergebnis ist ein Stack, den Sie zusammenstellen, statt ein Produkt, das Sie übernehmen.
Die praktischen Gründe für Open Source gehen über die Kosten hinaus. Ausgereifte Projekte wie Scrapy und Beautiful Soup haben jahrelange Edge Cases bereits gelöst, große Communities, die Fragen beantworten, und Dokumentation, die tief genug ist, um einen Einsteiger einzuarbeiten. Sie sind nicht an den Fahrplan eines Anbieters gebunden, und wenn eine Zielseite ihr Markup ändert, können Sie Ihre Selektoren noch am selben Tag anpassen. Die folgenden Bibliotheken sind diejenigen, die dieses Vertrauen verdient haben, roughly geordnet von den gebräuchlichsten Parsing- und Fetching-Tools bis hin zu den schwereren Browser-Automatisierungsoptionen.
Beautiful Soup (Python)
Beautiful Soup ist der klassische Python-HTML-Parser, und das aktuelle Release ist Beautiful Soup 4. Seine Beständigkeit verdankt er einer Eigenschaft: er geht mit fehlerhaftem Markup souverän um. HTML aus der realen Welt ist voller nicht geschlossener Tags und kaputtem Nesting, und Beautiful Soup wandelt selbst chaotische Dokumente in einen navigierbaren Baum von Python-Objekten um, den Sie nach Tag, Klasse oder Attribut durchsuchen können. Die API liest sich fast wie normales Englisch, weshalb er üblicherweise der erste Parser ist, den Einsteiger kennenlernen.
Greifen Sie auf Beautiful Soup zurück, wenn das Markup unregelmäßig ist, das Projekt klein bis mittelgroß ist, oder wenn Lesbarkeit wichtiger ist als rohe Geschwindigkeit. Er ruft selbst keine Seiten ab, daher wird er mit einem HTTP-Client gepaart, und er ist bei sehr großen Dokumenten langsamer als lxml. Für die meisten Scraping-Aufgaben spielt dieser Unterschied keine Rolle. Unser Leitfaden zu Beautiful Soup in Python geht tiefer auf Selektoren und Baumnavigation ein.
from bs4 import BeautifulSoup soup = BeautifulSoup(html, "html.parser") title = soup.find("h1").text links = [a["href"] for a in soup.select("a[href]")]
Scrapy (Python)
Scrapy ist kein Parser, sondern ein vollständiges Crawling-Framework, und er bleibt die erste Wahl für Python-Entwickler, die Scraper in großem Maßstab entwickeln. Während die meisten Bibliotheken nur ein Teil erledigen, liefert Scrapy die gesamte Pipeline: eine asynchrone Engine, die viele Seiten gleichzeitig abruft, Request-Scheduling, Link-Folgen, Retries und integrierten Export strukturierter Daten nach JSON, CSV oder XML. Er ist für Projekte konzipiert, die eine große Anzahl von Seiten crawlen und diese Arbeit in Spiders, Item-Definitionen und Verarbeitungspipelines organisiert benötigen, anstatt in einem einzelnen Skript.
Greifen Sie auf Scrapy zurück, wenn Skalierung und Struktur im Vordergrund stehen: wiederkehrende Crawls, viele Tausende URLs oder Daten, die durch Bereinigungs- und Speicherschritte fließen müssen. Der Preis dieser Leistungsfähigkeit ist eine steilere Lernkurve und mehr Setup als ein schnelles Fetch-and-Parse-Skript, daher ist er für eine einmalige Seite überdimensioniert. Er ist portierbar auf Linux, Windows und den BSDs, wird von einer großen Community unterstützt und ist erweiterbar genug, um neues Verhalten hinzuzufügen, ohne den Kern zu berühren. Wie ein reiner HTTP-Client führt vanilla Scrapy kein JavaScript aus, obwohl er sich mit Browser-Tools integriert, wenn ein Ziel Rendering erfordert.
import scrapy class BookSpider(scrapy.Spider): name = "books" start_urls = ["https://books.toscrape.com"] def parse(self, response): for book in response.css("article.product_pod"): yield {"title": book.css("h3 a::attr(title)").get()}
lxml (Python)
lxml ist die Geschwindigkeitsoption unter den Python-Parsern. Aufgebaut auf den C-Bibliotheken libxml2 und libxslt, parst er große HTML- und XML-Dokumente deutlich schneller als ein reiner Python-Parser und bietet vollständige XPath-1.0-Unterstützung, die präzise, ausdrucksstarke Abfragen in tief verschachteltes Markup ermöglicht. Wenn Sie Tausende von Dokumenten verarbeiten oder Daten aus strukturierten XML-Feeds extrahieren, macht sich dieser Leistungsunterschied deutlich bemerkbar.
Greifen Sie auf lxml zurück, wenn Geschwindigkeit wichtig ist, die Dokumente groß sind oder Sie XPath statt CSS-Selektoren bevorzugen. Der Kompromiss besteht darin, dass er strenger als Beautiful Soup ist, sodass sehr kaputtes Markup zu Problemen führen kann, und die API ist für Einsteiger etwas weniger freundlich. Viele Teams verwenden beide: lxml als zugrundeliegenden Parser für Beautiful Soup, um das Beste aus toleranter Navigation und schnellem Parsing zu vereinen. Wenn Sie Abfragestile abwägen, vergleicht der Artikel zu XPath und CSS-Selektoren die beiden direkt.
Requests und HTTPX (Python)
Requests ist der HTTP-Client, mit dem die meisten Python-Scraper beginnen. Er tut eine Sache gut: eine Anfrage senden und die Antwort zurückgeben, mit Sessions, Cookies, Headern und Weiterleitungen in einer sauberen API verwaltet. Er parst kein HTML und führt kein JavaScript aus, sodass er allein nur das rohe Markup sieht, das der Server zurückgibt. Für statische Seiten, öffentliche Kataloge und jeden Endpunkt, der HTML oder JSON direkt zurückgibt, ist das genau genug, und er ist schnell, weil kein Browser-Overhead entsteht.
HTTPX ist der moderne Begleiter, den es sich lohnt zu kennen: eine nahezu drop-in-kompatible API, die native Async-Unterstützung und HTTP/2 hinzufügt, was relevant ist, wenn Sie viele Anfragen gleichzeitig absetzen möchten, ohne ein vollständiges Framework aufzubauen. Greifen Sie auf einen der beiden als Fetch-Schicht zurück, wenn der gewünschte Inhalt in der initialen Antwort vorhanden ist, und kombinieren Sie ihn dann mit Beautiful Soup oder lxml, um diese Antwort in strukturierte Daten umzuwandeln. Die gemeinsame Einschränkung ist die Kehrseite ihrer Geschwindigkeit: Keiner der beiden kann Seiten scrapen, die ihren Inhalt mit clientseitigem JavaScript aufbauen, weil keiner davon ausführt.
import requests resp = requests.get("https://example.com") print(resp.status_code) # 200 html = resp.text # raw HTML, ready to parse
Cheerio (JavaScript)
Cheerio ist der schnelle, schlanke HTML-Parser für die Node.js-Welt und der spirituelle Nachfolger der älteren Node-Scraping-Tools, die auf jQuery-ähnliche Selektion setzten. Er implementiert eine vertraute, jQuery-ähnliche API über einem geparsten DOM, sodass Sie Elemente mit denselben Selektoren auswählen, die Sie in einem Browser verwenden würden, aber ohne das Browser-Gewicht. Eine seiner herausragenden Eigenschaften ist es, Elemente aus dem Dokument schnell auswählen zu lassen, ohne komplexe reguläre Ausdrücke schreiben zu müssen, was die Extraktion vereinfacht und den Code lesbar hält.
Greifen Sie auf Cheerio zurück, wenn Sie in JavaScript scrapen und der Seiteninhalt im server-gerenderten HTML vorhanden ist. Er ist rein ein Parser, daher wird er mit einem Fetch-Aufruf (dem eingebauten fetch, axios oder ähnlichem) kombiniert, um zunächst das Markup zu holen. Wie jeder statische Parser führt er keine clientseitigen Skripte aus. Für dynamische Seiten wechseln Sie zu einem vollständigen Browser-Tool. Unser Walkthrough zum Erstellen eines Web-Scrapers mit Node.js zeigt Cheerio in einem vollständigen Ablauf.
const cheerio = require("cheerio"); const $ = cheerio.load(html); const title = $("h1").text(); const links = $("a[href]").map((i, el) => $(el).attr("href")).get();
Selenium (mehrsprachig)
Selenium ist Browser-Automatisierung und ist die am weitesten unterstützte und dokumentierte Option in dieser Kategorie. Er steuert einen echten Browser (Chrome, Firefox und andere), sodass die Seite genau so geladen wird, wie ein Benutzer sie sehen würde, JavaScript inklusive. Das macht ihn zur Antwort auf dynamische Seiten, bei denen das heruntergeladene HTML fast leer ist, bis Skripte laufen und Inhalt injizieren. Da er einen echten Browser steuert, kann er auch Schaltflächen klicken, Formulare ausfüllen, scrollen und auf das Erscheinen von Elementen warten, was für Inhalte unerlässlich ist, die erst nach einer Interaktion laden. Sein WebDriver-Protokoll hat Bindings für Python, Java, JavaScript, Ruby und C#, sodass er zu nahezu jedem Stack passt.
Greifen Sie auf Selenium zurück, wenn ein Ziel clientseitig rendert und eine einfache Anfrage keine brauchbaren Daten zurückgibt, oder wenn Sie einen echten Benutzer über mehrere Schritte simulieren müssen. Der Kompromiss ist das Gewicht: Das Betreiben eines Browsers ist langsamer und ressourcenhungriger als eine HTTP-Anfrage. Nutzen Sie ihn nur dort, wo Rendering wirklich erforderlich ist, und behalten Sie für alles Statische einen leichteren Fetch-and-Parse-Stack bei. Das breitere Muster beschreibt wie man JavaScript-Websites crawlt.
Browser-Automatisierung löst das Rendering-Problem, nicht aber das Block-Problem, und das ist normalerweise die nächste Hürde. Unabhängig davon, welche Open-Source-Bibliothek Sie zum Parsen verwenden, kann die Crawlbase Crawling API darunter als Fetch-Schicht dienen: Sie senden eine URL, und sie übernimmt rotierende IPs, Browser-Rendering für JavaScript-lastige Seiten und Retries bei Blocks auf ihrer Seite, und gibt dann sauberes HTML direkt in Beautiful Soup, lxml, Cheerio oder einen Scrapy-Spider zurück. Sie arbeitet neben Ihrem Stack, anstatt ihn zu ersetzen, sodass Sie Ihre Parsing-Logik behalten und die Pflege der Anti-Blocking-Infrastruktur aufgeben.
Playwright (mehrsprachig)
Playwright ist die moderne Browser-Automatisierungsbibliothek, von Microsoft entwickelt und darauf ausgelegt, Chromium, Firefox und WebKit über eine einzige API zu steuern. Im Vergleich zu älteren Tools setzt er auf Auto-Waiting, sodass er auf das Bereit-Sein von Elementen wartet, anstatt Sie zu zwingen, manuelle Wartezeiten einzustreuen, was Scraper für dynamische Seiten deutlich zuverlässiger macht. Er verfügt über offizielle Bindings für Python, JavaScript, Java und .NET und unterstützt Headless- oder vollständige Browser-Ausführungen von Haus aus.
Greifen Sie auf Playwright zurück, wenn Sie JavaScript-lastige oder interaktive Seiten scrapen müssen und eine sauberere, stabilere Erfahrung als ältere Automatisierungstools wünschen. Er erledigt dieselbe grundlegende Aufgabe wie Selenium, rendert echte Seiten und unterstützt Klicks, Formulareingaben und Navigation, mit einer neueren API, die viele Teams schneller schreiben und debuggen finden. Die Kosten sind dieselben Browser-Overheads, die jedes Rendering-Tool mit sich bringt. Unser Playwright-Web-Scraping-Leitfaden deckt ein vollständiges Setup ab.
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://example.com") html = page.content() # fully rendered DOM browser.close()
Puppeteer (JavaScript)
Puppeteer ist die Node.js-Browser-Automatisierungsbibliothek, die Headless Chrome für Scraping und Testing populär gemacht hat. Gemeinsam mit dem Chrome-Team gepflegt, bietet er feinkörnige Kontrolle über einen Chromium-Browser aus JavaScript heraus: navigieren, auf Selektoren warten, Code innerhalb der Seite auswerten, Netzwerkanfragen abfangen sowie Screenshots oder PDFs erfassen. Für JavaScript-Entwickler, die in einer Sprache bleiben möchten, ist er das natürliche Rendering-Tool.
Greifen Sie auf Puppeteer zurück, wenn Ihr Stack Node.js ist und Sie dynamische Seiten rendern oder mit ihnen interagieren müssen. Er ist standardmäßig Chromium-fokussiert, während Playwright drei Browser-Engines abdeckt, sodass die Wahl oft davon abhängt, ob Cross-Browser-Abdeckung für Sie wichtig ist. Wie bei jedem Browser-Tool ist ein höherer Ressourcenverbrauch als bei einem einfachen HTTP-Fetch zu erwarten, und reservieren Sie ihn für Seiten, die wirklich einen echten Browser benötigen.
Die beiden überschneiden sich stark beim Scraping. Puppeteer ist die etablierte Node.js- und Chromium-Wahl mit einem großen Fundus an Beispielen, während Playwright erstklassige Multi-Browser-Unterstützung, mehr Sprach-Bindings und integriertes Auto-Waiting hinzufügt. Wenn Sie bereits auf Node sind und nur auf Chromium abzielen, ist Puppeteer eine gute Standardwahl. Wenn Sie auch Firefox und WebKit möchten, oder wenn Sie in Python schreiben, ist Playwright normalerweise der einfachere Weg.
Die Bibliotheken im Vergleich
Diese acht Teile passen in eine kleine Anzahl von Slots: HTML abrufen, parsen oder mit einem echten Browser rendern. Diese Tabelle ordnet jede Bibliothek der Sprache und der Aufgabe zu, die sie besitzt, damit Sie Ihr Ziel darauf abbilden und den Stack zusammenstellen können, anstatt zu raten.
| Bibliothek | Sprache | Besonders geeignet für |
|---|---|---|
| Beautiful Soup | Python | Parsen von unregelmäßigem oder chaotischem HTML |
| Scrapy | Python | Großangelegte Crawls und Pipelines |
| lxml | Python | Schnelles Parsen, große Dokumente, XPath |
| Requests / HTTPX | Python | Abrufen statischer Seiten und APIs |
| Cheerio | JavaScript | Schnelles jQuery-ähnliches Parsen in Node |
| Selenium | Mehrsprachig | Rendern und Interaktion mit dynamischen Seiten |
| Playwright | Mehrsprachig | Modernes, Multi-Browser-Rendering |
| Puppeteer | JavaScript | Headless Chromium in Node |
Beachten Sie, dass keine einzelne Zeile die Antwort auf alles ist. Ein realistischer Scraper kombiniert sie: Requests plus Beautiful Soup für statische Python-Arbeit, Cheerio hinter einem Fetch-Aufruf in Node, Scrapy wenn der Crawl wächst, und Selenium, Playwright oder Puppeteer wenn die Seite erst nach dem Ausführen von JavaScript existiert. Die Kunst liegt darin, den Slot auf das Ziel abzustimmen, nicht darin, einen Favoriten zu wählen.
Wie man die richtige Bibliothek wählt
Drei Fragen klären den Großteil der Entscheidung. Erstens: In welcher Sprache ist Ihr Projekt? Python hat das tiefste Scraping-Ökosystem (Requests, Beautiful Soup, lxml, Scrapy), während JavaScript auf Cheerio für das Parsing und Puppeteer für das Rendering setzt. Selenium und Playwright überqueren Sprachgrenzen, sodass sie auf beiden Seiten passen. Zweitens: Rendert die Seite ihren Inhalt serverseitig oder clientseitig? Statisches HTML benötigt nur einen Fetcher und einen Parser; Seiten, die sich mit JavaScript selbst aufbauen, benötigen ein Browser-Tool. Drittens: Was ist der Umfang? Eine einmalige Seite erfordert ein leichtes Fetch-and-Parse-Skript, während Tausende von Seiten mit Warteschlangen, Retries und Exporten auf Scrapy hinweisen.
Für Einsteiger haben Beautiful Soup und Cheerio die sanftesten Lernkurven und lesen sich nahe an normaler Sprache. Für große oder wiederkehrende Crawls zahlt sich Scrapys Struktur aus. Für dynamische Ziele beginnen Sie mit Playwright, wenn Sie die moderne API und Multi-Browser-Unterstützung möchten, oder Puppeteer, wenn Sie in Node und Chromium bleiben. Stimmen Sie das Tool auf die Antworten ab, und der Stack stellt sich von selbst zusammen.
Verantwortungsvolles Scraping
Egal welchen Stack Sie bauen, scrapen Sie mit Zurückhaltung. Respektieren Sie die Nutzungsbedingungen und robots.txt einer Website, konzentrieren Sie sich auf öffentlich verfügbare Daten statt auf alles hinter einem Login, zu dem Sie nicht berechtigt sind, und halten Sie die Anfragerate vernünftig, damit Sie die Server, auf die Sie angewiesen sind, nicht belasten. Verantwortungsvolles Tempo ist auch praktisch: sanfter, gut identifizierter Traffic wird weit seltener begrenzt oder blockiert als ein aggressiver Crawl, sodass gutes Verhalten und zuverlässiges Scraping in dieselbe Richtung zeigen. Das breitere Spielbuch finden Sie unter Websites scrapen ohne blockiert zu werden.
Wichtigste Erkenntnisse
- Open Source dominiert den Stack. Die Fetcher, Parser und Browser-Treiber, die Scraping antreiben, sind kostenlose, von der Community gepflegte Projekte, die Sie lesen, erweitern und kombinieren können.
- Keine einzelne beste Bibliothek. Ein echter Scraper kombiniert einen Fetcher, einen Parser und manchmal einen Browser, also passen Sie jedes Tool auf die Aufgabe an, anstatt einen Favoriten zu wählen.
- Python und JavaScript führen. Python bringt Requests, Beautiful Soup, lxml und Scrapy; JavaScript bringt Cheerio und Puppeteer; Selenium und Playwright überqueren beide.
- Rendern Sie nur wenn nötig. Verwenden Sie Fetcher und Parser für statische Seiten, und greifen Sie auf Selenium, Playwright oder Puppeteer nur zurück, wenn die Seite JavaScript benötigt, um zu erscheinen.
- Blocks sind ein separates Problem. Die richtige Bibliothek zu wählen macht Ihren Code korrekt, aber Rotation, Rendering in großem Maßstab und Retries liegen außerhalb jedes einzelnen Parsers.
Häufig gestellte Fragen
Was sind Open-Source-Scraping-Bibliotheken?
Es sind kostenlose, von der Community gepflegte Code-Bibliotheken, die die Bausteine des Web Scrapings übernehmen: Seiten über HTTP abrufen, das zurückgegebene HTML oder XML parsen und (für dynamische Seiten) einen echten Browser steuern, um JavaScript zu rendern. Da der Quellcode offen ist, können Sie ihn einsehen, erweitern und Teile aus verschiedenen Bibliotheken zu einem Stack zusammenfügen, ohne für die Parsing-Schicht zu zahlen.
Welche Open-Source-Bibliothek eignet sich am besten für Web Scraping?
Es gibt keine einzelne beste, da sie verschiedene Aufgaben erfüllen. Für statische Seiten in Python ist Requests zum Abrufen plus Beautiful Soup zum Parsen der einfachste zuverlässige Stack. Fügen Sie lxml für Geschwindigkeit oder XPath hinzu, Scrapy für große Crawls, und Selenium, Playwright oder Puppeteer, wenn das Ziel Inhalt nur mit JavaScript rendert. In Node übernimmt Cheerio das Parsing und Puppeteer das Rendering.
Welche Bibliothek eignet sich am besten für JavaScript-lastige Seiten?
Verwenden Sie eine Browser-Automatisierungsbibliothek, da reine HTTP-Clients niemals JavaScript ausführen. Selenium ist am weitesten verbreitet und dokumentiert, Playwright ist die moderne Option mit Multi-Browser-Unterstützung und Auto-Waiting, und Puppeteer ist die natürliche Wahl für Node.js-Projekte, die auf Chromium abzielen. Alle drei laden die Seite in einem echten Browser, sodass Skripte ausgeführt werden und Inhalt injiziert wird.
Soll ich Beautiful Soup oder lxml verwenden?
Verwenden Sie Beautiful Soup, wenn das Markup unregelmäßig ist oder Lesbarkeit wichtig ist, da er kaputtes HTML tolerant handhabt und sich nahe an normaler Sprache liest. Verwenden Sie lxml, wenn Sie große Dokumente parsen, maximale Geschwindigkeit benötigen oder XPath-Abfragen wollen. Sie schließen sich nicht gegenseitig aus: lxml kann als zugrundeliegender Parser für Beautiful Soup dienen, was Ihnen sowohl tolerante Navigation als auch schnelles Parsing bietet.
Handeln Open-Source-Bibliotheken Blocks und CAPTCHAs?
Im Allgemeinen nein. Parsing- und Crawling-Bibliotheken extrahieren und organisieren Daten, aber unblockiert zu bleiben über Tausende von Anfragen ist ein separates Problem: rotierende IPs, realistisches Tempo, Browser-Rendering und Retries bei Fehlern. Diese Arbeit liegt außerhalb dessen, wofür jede einzelne Scraping-Bibliothek konzipiert wurde, weshalb Teams ihren Open-Source-Parser oft mit einer verwalteten Fetch-Schicht wie einer Crawling-API kombinieren.
Kann ich Bibliotheken aus verschiedenen Sprachen in einem Projekt mischen?
Sie halten im Allgemeinen eine Sprache pro Scraper, mischen aber Bibliotheken innerhalb dieser frei. Ein Python-Scraper könnte HTTPX zum Abrufen, Beautiful Soup oder lxml zum Parsen und Playwright zum Rendern der wenigen Seiten verwenden, die einen Browser benötigen. Ein Node-Scraper kombiniert einen Fetch-Aufruf mit Cheerio und fügt Puppeteer für dynamische Ziele hinzu. Das modulare Design dieser Bibliotheken macht genau diese Zusammenstellung einfach.
Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.
Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.
