Einführung
Daten aus dem modernen Web einfach extrahieren
Scrapling ist ein Web-Scraping-Framework für Python. Es vereint schnelle HTTP-Anfragen, Stealth-Browser, die Auswertung von Seiten und paralleles Crawling in einer Bibliothek.
Extrahieren Sie Daten aus statischen Seiten, führen Sie JavaScript aus, bedienen Sie Websites und greifen Sie auf deren APIs zu. Erstellen Sie Crawler mit wiederverwendbaren Sitzungen, Proxy-Rotation, automatischen Wiederholungsversuchen, Pause und Fortsetzung sowie integriertem Datenexport.
Nutzen Sie Scrapling in Python, im Terminal oder mit Ihrem KI-Agenten über den MCP-Server und den Agent Skill. Es deckt den ganzen Ablauf ab: von wenigen Feldern bis zum Speichern einer ganzen Website als saubere Markdown-Dateien.
Was Sie mit Scrapling machen können¶
- Seiten abrufen und bedienen: Schnelle HTTP-Anfragen, Stealth-Browser, JavaScript-Ausführung, Umgang mit Cloudflare Turnstile und Interstitial, dauerhafte Sitzungen und Aufzeichnung von API-Antworten im Hintergrund.
- Seiten auswerten und Daten extrahieren: Suche mit CSS, XPath, Text und regulären Ausdrücken, Wiederfinden von Elementen nach Änderungen der Seite, Suche nach ähnlichen Elementen und saubere Markdown-Ausgabe.
- Crawlen und exportieren: Parallele Spider, Proxy-Rotation, Wiederholungsversuche, AutoThrottle, Pause und Fortsetzung, Streaming, fertige Vorlagen und Export nach JSON, JSONL, CSV und XML.
- Daten mit KI oder im Terminal extrahieren: Ein MCP-Server zum Browsen und Extrahieren von Daten mit KI-Agenten, ein Agent Skill, CLI-Befehle und eine interaktive Shell.
Beginnen Sie mit einer einzelnen Seite:
from scrapling.fetchers import Fetcher
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()
print(quotes)
Oder extrahieren Sie mehr Daten mit einem Spider:
from scrapling.spiders import Spider, Response
class QuotesSpider(Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com/"]
async def parse(self, response: Response):
for quote in response.css('.quote'):
yield {
"text": quote.css('.text::text').get(),
"author": quote.css('.author::text').get(),
}
result = QuotesSpider().start()
print(len(result.items))
result.items.to_json("quotes.json")
Dieses Beispiel gibt 10 aus und speichert die Zitate und ihre Autoren in quotes.json.
Hauptsponsoren¶
Möchten Sie hier werben? Klicken Sie hier, wählen Sie ein Angebot und nutzen Sie die Vorteile.
Wichtige Funktionen¶
Spider: ein vollständiges Crawling-Framework¶
- 🕷️ Spider-API ähnlich wie Scrapy: Definieren Sie Spider mit
start_urls, asynchronenparse-Callbacks sowieRequest- undResponse-Objekten. - ⚡ Paralleles Crawling: Legen Sie die Anzahl gleichzeitiger Anfragen, die Grenzen pro Domain und die Wartezeit zwischen Downloads fest.
- 🔄 Mehrere Sitzungen: Nutzen Sie HTTP-Anfragen und Stealth-Browser ohne grafische Oberfläche im selben Spider. Leiten Sie Anfragen über die ID an unterschiedliche Sitzungen weiter.
- 💾 Pause und Fortsetzung: Speichern Sie ausstehende Anfragen und besuchte URLs mit
crawldir. Drücken Sie Strg+C, um sicher anzuhalten, und starten Sie mit demselben Ordner erneut. - 📡 Ergebnisse als Stream: Empfangen Sie Elemente direkt nach dem Extrahieren mit
async for item in spider.stream(), zusammen mit Statistiken in Echtzeit. Das eignet sich für Oberflächen, Datenverarbeitung und lange Crawls. - 🛡️ Blockierte Anfragen erkennen: Erkennen und wiederholen Sie blockierte Anfragen automatisch. Sie können das Verhalten anpassen.
- 🚦 AutoThrottle: Der Spider passt die Wartezeit pro Domain an die Antwortgeschwindigkeit der Website an. Blockiert oder begrenzt die Website Anfragen, verdoppelt er die Wartezeit oder hält die von
Retry-Afterangegebene Zeit ein. Danach beschleunigt er wieder. - 🤖 robots.txt beachten: Aktivieren Sie
robots_txt_obey, um die VorgabenDisallow,Crawl-delayundRequest-ratezu beachten. Die Angaben werden pro Domain zwischengespeichert. - 🧪 Entwicklungsmodus: Speichern Sie Antworten beim ersten Lauf auf der Festplatte und nutzen Sie sie danach erneut. So können Sie
parse()anpassen, ohne neue Anfragen an die Server zu senden. - 🧩 Fertige Spider-Vorlagen: Nutzen Sie
CrawlSpider, um Links nach Regeln zu folgen,SitemapSpiderfür Crawls über Sitemaps oder robots.txt,XMLFeedSpiderundCSVFeedSpiderzum Lesen von XML-, RSS- und CSV-Feeds sowieShopifySpiderzum Sammeln von Produkten aus öffentlichen Shopify-Shops, mit einem Element pro Variante. - 🔗 Links extrahieren:
LinkExtractorerlaubt oder verwirft Links anhand von Mustern, filtert Domains und Dateiendungen, begrenzt die Suche mit CSS oder XPath und vereinheitlicht URLs. Nutzen Sie ihn mit den Vorlagen oder einzeln. - 📦 Integrierter Export: Exportieren Sie Ergebnisse mit Hooks und Ihrer eigenen Datenverarbeitung oder mit den integrierten Formaten JSON, JSONL, CSV und XML:
result.items.to_json(),to_jsonl(),to_csv()undto_xml().
Seiten mit Sitzungen abrufen¶
- HTTP-Anfragen: Senden Sie schnelle und unauffällige HTTP-Anfragen mit
Fetcher. Sie können TLS-Fingerprints und Header eines Browsers nachbilden und HTTP/3 nutzen. - Dynamisches Laden: Rufen Sie dynamische Websites mit vollständiger Browserautomatisierung über
StealthyFetcherab. Er unterstützt das Chromium von Playwright und Google Chrome. - Antibot-Systeme umgehen:
StealthyFetcherverbirgt die Automatisierung und bildet Browser-Fingerprints nach. Er kann verschiedene Arten von Cloudflare Turnstile und Interstitial automatisch lösen. - Sitzungen verwalten:
FetcherSessionundStealthySessionbehalten Cookies und den Zustand zwischen Anfragen bei. - Proxy-Rotation:
ProxyRotatorwechselt Proxys zyklisch oder nach eigenen Regeln in allen Sitzungstypen. Sie können auch einen Proxy für eine einzelne Anfrage wählen. - Domains und Werbung blockieren: Blockieren Sie Anfragen an bestimmte Domains und deren Subdomains, oder aktivieren Sie den Werbeblocker der Browser-Fetcher. Er umfasst etwa 3.500 bekannte Werbe- und Tracking-Domains.
- DNS-Lecks verhindern: Aktivieren Sie DNS-over-HTTPS, um DNS-Anfragen über den DoH-Dienst von Cloudflare zu senden und Lecks bei der Nutzung von Proxys zu verhindern.
- Entfernte Browser: Verbinden Sie sich über CDP und
cdp_urlmit einem laufenden Browser, auf Ihrem Computer, einem anderen Server oder bei einem Browserdienst. Mitexecutable_pathkönnen Sie auch Ihre eigene Chromium-Version für jeden Browser-Fetcher verwenden. - API-Antworten im Hintergrund aufzeichnen: Aktivieren Sie
record_requests=Truein einer Browsersitzung und suchen Sie gespeicherte Antworten mitsession.network.search(limit=None). Lesen Sie API-Daten und HTTP-Fehler aus mehreren Seitenaufrufen, ohne die Anfragen zu wiederholen. Der Verlauf ist in seiner Größe begrenzt und speichert den Inhalt von Textantworten. - Asynchroner Betrieb: Alle Fetcher lassen sich asynchron nutzen. Dafür gibt es eigene Sitzungsklassen.
Seiten auswerten und Daten extrahieren¶
- 🔄 Elemente wiederfinden: Finden Sie Elemente nach Änderungen der Website mit Algorithmen zur Ähnlichkeitssuche wieder.
- 🎯 Flexible Auswahl: Nutzen Sie CSS, XPath, Filter, Text, reguläre Ausdrücke und mehr.
- 🔍 Ähnliche Elemente: Finden Sie automatisch Elemente, die den bereits gefundenen ähneln.
KI-Funktionen¶
- 🤖 MCP-Server: Ermöglicht Assistenten und KI-Agenten wie Claude und Cursor, Daten mit Scrapling zu extrahieren. Dazu dienen HTTP-Anfragen, Browseraktionen, Screenshots, ein gespeicherter Anmeldezustand und API-Antworten im Hintergrund. Er nutzt unseren Stealth-Browser und Werkzeuge, mit denen geeignete Modelle CAPTCHAs lösen können, zusätzlich zum Cloudflare-Löser. Er verringert den an das Modell gesendeten Inhalt, blockiert Werbung und schützt vor Prompt Injection. Entfernte Browser über CDP und HTTP-Verbindungen mit Authentifizierungsoptionen sind ebenfalls möglich. (Demovideo)
- 🧠 Agent Skill: Ein Agent Skill zum Installieren, der Coding-Agenten die Bibliothek erklärt. So schreiben sie Code, der zur aktuellen API passt.
- 📚 Markdown für RAG: Wandeln Sie eine Seite mit einer Zeile (
page.markdown()) in sauberes Markdown für Sprachmodelle um, oder speichern Sie mit der VorlageContentSpidereine ganze Website als Markdown-Dateien. Dafür ist kein Sprachmodell nötig. (Dokumentation)
Schnell und im Alltag erprobt¶
- 🚀 Hohe Geschwindigkeit: Optimierte Leistung, die die meisten Web-Scraping-Bibliotheken für Python übertrifft.
- 🔋 Geringer Speicherbedarf: Optimierte Datenstrukturen und Laden bei Bedarf.
- ⚡ Schnelle JSON-Ausgabe: 10-mal schneller als die Standardbibliothek.
- 🏗️ In der Praxis getestet: Tests decken 92 % von Scrapling ab, und der gesamte Code hat Typannotationen. Hunderte Menschen haben es im letzten Jahr täglich zur Datenextraktion verwendet.
Werkzeuge für Entwicklung und Datenextraktion¶
- 🎯 Interaktive Shell: Eine optionale IPython-Shell mit Scrapling, Kurzbefehlen und Werkzeugen für die schnelle Entwicklung von Skripten. Wandeln Sie curl-Anfragen in Scrapling-Anfragen um und zeigen Sie Ergebnisse im Browser an.
- 🚀 Nutzung im Terminal: Extrahieren Sie die Daten einer URL, ohne Code zu schreiben.
- 🛠️ Navigation im DOM: Greifen Sie auf Eltern-, Geschwister- und Kindelemente zu.
- 🧬 Textverarbeitung: Reguläre Ausdrücke, Textbereinigung und optimierte Arbeit mit Zeichenketten.
- 📝 Selektoren erzeugen: Erstellen Sie zuverlässige CSS- und XPath-Selektoren für jedes Element.
- 🔌 Vertraute API: Ähnlich wie Scrapy und BeautifulSoup, mit denselben Pseudoelementen wie Scrapy und Parsel.
- 🤝 Direkte Integration mit Scrapy: Ergänzen Sie einen Callback um den Dekorator
scrapling_response, um die bereits abgerufenen Antworten mit dem Scrapling-Parser auszuwerten. Sie müssen Ihr Programm nicht neu schreiben. - 📘 Vollständige Typannotationen: Sie helfen dem Editor, Code zu prüfen und zu vervollständigen. Der gesamte Code wird bei jeder Änderung automatisch mit PyRight und MyPy geprüft.
- 🔋 Fertiges Docker-Image: Bei jeder Version wird automatisch ein Docker-Image mit allen Browsern erstellt und veröffentlicht.
Sterne auf GitHub¶
Die Zahl der GitHub-Sterne von Scrapling wächst seit seiner Veröffentlichung, wie die Grafik zeigt.
Installation¶
Scrapling benötigt Python 3.10 oder neuer:
Achtung
Dieser Befehl installiert nur den Parser und seine Abhängigkeiten, ohne Fetcher oder Werkzeuge für die Kommandozeile. Wenn Sie nur das installieren, führt ein Import aus scrapling.fetchers oder scrapling.spiders, wie in den Beispielen oben, zu ModuleNotFoundError. Für Fetcher oder Spider müssen Sie zuerst die Fetcher-Abhängigkeiten wie unten gezeigt installieren.
Optionale Abhängigkeiten¶
-
Für Fetcher, deren Klassen oder die folgenden Zusatzfunktionen installieren Sie die Abhängigkeiten der Fetcher und Browser:
pip install "scrapling[fetchers]" scrapling install # normal install scrapling install --force # force reinstallDadurch werden alle Browser, ihre Systemabhängigkeiten und die Werkzeuge zum Ändern der Browser-Fingerprints heruntergeladen.
Sie können sie auch aus Python installieren, statt einen Befehl auszuführen:
-
Zusatzfunktionen:
- Den MCP-Server installieren:
- Die Abhängigkeiten zum Aufbau von RAG-Systemen installieren:
- Die interaktive Shell und den Befehl
extractinstallieren: - Alles installieren:
Führen Sie
scrapling installaus, wenn Sie Browser-Fetcher nutzen möchten. HTTP-Anfragen benötigen keinen Browser.
Docker¶
Sie können auch ein Docker-Image mit allen Extras und Browsern von DockerHub herunterladen:
Oder aus der GitHub-Registry herunterladen: Das Image wird aus dem Hauptbranch des Repositorys erstellt und von GitHub Actions automatisch veröffentlicht.Aufbau der Dokumentation¶
Die Scrapling-Dokumentation ist umfangreich. Deshalb folgen wir dem Diátaxis-Modell für Dokumentation.
Unterstützung¶
Wenn Ihnen Scrapling gefällt und Sie die Entwicklung unterstützen möchten:
- ⭐ Geben Sie dem GitHub-Repository einen Stern.
- 🚀 Folgen Sie uns auf Twitter und treten Sie dem Discord-Server bei.
- 💝 Sie können das Projekt sponsern oder mir einen Kaffee spendieren.
- 🐛 Melden Sie Fehler und schlagen Sie Funktionen auf GitHub Issues vor.
Lizenz¶
Dieses Projekt nutzt die BSD-3-Lizenz. Weitere Angaben stehen in der Datei LICENSE.
