Änderungsverlauf¶
Alle wichtigen Änderungen an Scrapling aus den GitHub-Releases.
v0.5.1 - 2026-11-04¶
Kleiner Versionssprung, großes Browser-Upgrade! Mit dieser Version können KI-Agenten Bewegungen verfolgen und Drag-and-drop steuern. Dazu kommen eigene Klassen für entfernte Browser-Sitzungen und Korrekturen für Parser, Spider, Proxys und die Shell 🚀
Warnung
Diese Version enthält inkompatible Änderungen an Verbindungen zu entfernten Browsern. Für Verbindungen zu entfernten Browsern ist jetzt eine neue Browser-Sitzungsklasse erforderlich. Lesen Sie vor dem Update den Migrationsleitfaden für entfernte Sitzungen.
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
KI-Agenten können jetzt Bewegungen verfolgen und die Maus genauer steuern (siehe Dokumentation):
- Die Seite in Bewegung beobachten: Eine kurze Bildfolge hilft dem Agenten, Animationen, bewegte Bedienelemente und Änderungen zu verstehen, die ein einzelner Screenshot übersehen kann.
- Ziehen, prüfen, anpassen und ablegen: Eine Maustaste gedrückt halten, ein Element oder einen Schieberegler bewegen, die Seite bei gedrückter Taste prüfen, dann die Position anpassen und loslassen. Unterstützt die linke, rechte und mittlere Maustaste.
- Einen entfernten Browser mit bestehender Anmeldung wiederverwenden oder mit einem getrennten Browser-Kontext starten. So kann der Agent die passende Sitzung für die Aufgabe wählen.
- Weniger Tokens für Werkzeugbeschreibungen verbrauchen, dank kürzerer Texte und weniger wiederholter Hinweise.
-
Eigene Klassen für entfernte Browser-Sitzungen mit Kontrolle über die Wiederverwendung von Anmeldungen.
RemoteSessionundAsyncRemoteSessionverbinden sich über einen HTTP- oder WebSocket-CDP-Endpunkt mit einem bestehenden Chromium-Browser. Sie unterstützen die üblichen Funktionen der Stealth-Sitzungen, einschließlich des Lösens von Cloudflare-Prüfungen. Beide Klassen sind auch in der interaktiven Shell verfügbar. (Siehe Dokumentation)from scrapling.fetchers import RemoteSession with RemoteSession(cdp_url="http://localhost:9222", new_context=False) as session: page = session.fetch("https://example.com")new_context=Falseverwendet den bestehenden Standardkontext des Browsers und dessen Anmeldestatus. Seine Kontexteinstellungen bleiben aktiv, und seine vorhandenen Tabs bleiben offen, wenn Scrapling die Verbindung trennt.- Der Standardwert
new_context=Trueerstellt einen getrennten Kontext und schließt ihn am Ende der Sitzung. Scrapling verwendet in beiden Modi eigene Tabs.
-
Die Kodierung der Protokolldatei eines Spiders wählen, mit
log_file_encoding="utf-8"oder einer anderen Kodierung. Der StandardwertNonebehält Pythons Standardkodierung bei. (Siehe Dokumentation)
🐛 Fehlerbehebungen¶
- XPath-Ausdrücke geben ihre Werte jetzt korrekt zurück, einschließlich
string(),count()undboolean(). Leere Zeichenfolgen, null und falsch bleiben über die übliche Selektor-API verfügbar, von @jayhemnani9910 in #552. - Das Parsen von HTML ohne Wurzelelement korrigiert, einschließlich Eingaben, die nur aus Leerraum, Kommentaren oder einer Doctype-Deklaration bestehen, von @rushilnimbalker250 in #536.
-
find_similar(similarity_threshold=0)korrigiert, wenn die Referenz keine Attribute zum Vergleichen hat, von @Master-Norna in #539. -
Doppelte robots.txt-Abrufe bei gleichzeitigen Anfragen an dieselbe Domain behoben, von @RayenMlayeh in #538.
- Kollisionen temporärer Dateien bei gleichzeitigen Schreibvorgängen in den Entwicklungs-Cache behoben, von @xixihaha-ha in #546.
- Fehlerhafte Links stoppen nicht mehr die Extraktion gültiger Links auf derselben Seite, von @dajiaohuang in #548.
- CSV-Feeds mit Wagenrücklaufzeichen als Zeilentrenner korrigiert, wobei Zeilenumbrüche innerhalb von Feldern in Anführungszeichen erhalten bleiben, von @xunguangzlj-cloud in #551.
-
Abgeschnittene oder beschädigte gzip-Feeds werden jetzt wie üblich mit einer Warnung übersprungen, in Sitemap-, XML-Feed- und CSV-Feed-Spidern, von @cangen185-sudo in #522.
-
Proxy-Authentifizierung im Browser mit prozentkodierten Benutzernamen und Passwörtern korrigiert, von @kevin9327 in #545.
- Die Ressourcenbereinigung des Browsers verbessert, wenn das Einrichten einer Sitzung oder das Schließen eines Kontexts fehlschlägt. Eigene Ressourcen werden freigegeben, während übernommene entfernte Kontexte offen bleiben.
- Behoben: Das Parsen von Cookies in der Shell und der HTTP-CLI verwarf Browser-Cookie-Werte mit Leerzeichen oder Anführungszeichen, einschließlich der nachfolgenden Cookies, von @waw666waw666 in #541. Behebt #540.
- Die Curl-Konvertierung akzeptiert jetzt
-Lund--location, unter Beibehaltung des bisherigen Weiterleitungsverhaltens, von @jayhemnani9910 in #554. - Behoben:
scrapling extract fetch --ai-targetedaktivierte die Werbeblockierung nicht wie dokumentiert, von @postoso in #527.
v0.5 - 2026-10-17¶
Scrapling v0.5 verbessert fast alles: Abrufen, Parsen, Spider, Browser-Automatisierung, KI-Werkzeuge und Dokumentation in zehn Sprachen 🚀
Warnung
Diese Version enthält so viele inkompatible Änderungen, dass sie hier nicht alle aufgeführt werden können. Lesen Sie vor dem Update den Leitfaden zur Migration auf v0.5.
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Ein deutlich leistungsfähigerer MCP-Server für KI-Agenten, der fast jedes CAPTCHA lösen kann (siehe Dokumentation):
- Vollständige Browser-Abläufe: Formulare ausfüllen, klicken, den Mauszeiger über Elemente bewegen, scrollen, die Tastatur verwenden, Dialoge bedienen und auf Ergebnisse warten, alles in einer geordneten Folge. Unterstützt verschiedene Feldtypen und langsamere Interaktionen. Die Aktionen stoppen beim ersten Fehler.
- Die aktuelle Seite ohne Neuladen lesen und durchsuchen: HTML, Markdown oder Text aus einer ganzen Seite oder einem einzelnen Element extrahieren. Durchsuchbare Seitenansichten zeigen Rollen, Namen und Positionen der Elemente. Gezielte Ansichten behalten den umgebenden Kontext bei.
- Eigenes JavaScript ausführen und gezielte Screenshots aufnehmen: Skripte ausführen, auch mit asynchronen Vorgängen und Zugriff auf das JavaScript der Seite. Einzelne Elemente, den sichtbaren Bereich oder die ganze Seite als PNG oder JPEG aufnehmen.
- Netzwerkaktivität prüfen und Anmeldungen wiederverwenden: Aufgezeichnete Anfragen und Antworten untersuchen, den Anmeldestatus des Browsers speichern und wiederherstellen und mit Elementen in offenem oder geschlossenem Shadow DOM interagieren. Lesen Sie den aufgezeichneten Datenverkehr, bevor Sie die Sitzung schließen.
- Weniger Tokens verwenden und klarere Fehler erhalten: Kürzere Werkzeugbeschreibungen und gemeinsame Hinweise vermeiden Wiederholungen. Fehler bei Browsern und Anfragen erreichen die Agenten mit hilfreichen Meldungen.
-
Sehen Sie die Anfragen hinter der Seite. Aktivieren Sie
record_requests=True, um abgeschlossenen Datenverkehr über Ladevorgänge, Aktionen und Tabs hinweg aufzuzeichnen. Prüfen Sie dann die gespeicherten Antworten, ohne Anfragen erneut zu senden. (Siehe Dokumentation)from scrapling.fetchers import StealthySession with StealthySession(record_requests=True) as session: session.fetch("https://example.com", network_idle=True) for response in session.network.search(url_pattern=r"/api/", limit=None): print(response.url, response.status, response.body)- Nach URL, Methode, Ressourcentyp oder Status filtern und eine einzelne Antwort anhand ihrer ID abrufen. Header, gesendete Daten, API-Antworten, HTTP-Fehler und Weiterleitungen über die gewohnte
Response-API prüfen. - Speichert unterstützte Textkörper innerhalb der Größenlimits sowie Metadaten und einen Grund, wenn ein Antwortkörper nicht gespeichert werden kann. Das Standardlimit beträgt 1.000 Anfragen. Funktioniert mit synchronen und asynchronen Sitzungen. Der gespeicherte Python-Verlauf bleibt nach dem Schließen lesbar.
- Nach URL, Methode, Ressourcentyp oder Status filtern und eine einzelne Antwort anhand ihrer ID abrufen. Header, gesendete Daten, API-Antworten, HTTP-Fehler und Weiterleitungen über die gewohnte
-
Speichern Sie eine Anmeldung einmal und verwenden Sie sie bei weiteren Läufen wieder.
save_state(path)undload_state(path)speichern Cookies, lokalen Speicher und IndexedDB in Playwright-kompatiblem JSON. Sowohl synchrone als auch asynchrone Browser-Sitzungen unterstützen sie. (Siehe Dokumentation)- Laden Sie den Zustand, bevor Sie eine Seite abrufen oder neu laden. Erfordert einen gestarteten, gemeinsam genutzten Browser-Kontext ohne
proxy_rotator. Tabs, Browser-Einstellungen undsessionStoragewerden nicht gespeichert.
- Laden Sie den Zustand, bevor Sie eine Seite abrufen oder neu laden. Erfordert einen gestarteten, gemeinsam genutzten Browser-Kontext ohne
-
Extrahieren Sie offenes Shadow DOM mit
pierce_shadow=Trueund verwenden Sie anschließend CSS oder XPath wie gewohnt. Verfügbar in Browser-Fetchern, Sitzungen und über die CLI-Option--pierce-shadow. Behält Slot-Inhalte bei, ohne die aktive Seite zu ändern. Geschlossene Wurzeln und iframe-Dokumente sind in der HTML-Erfassung nicht enthalten. (Siehe Dokumentation) -
Wählen Sie, wie Ihr Spider eine Website durchsucht.
CrawlSpiderund seine Unterklassen, darunterContentSpider, unterstützencrawl_strategy="bfs", um die ältesten Anfragen zuerst einzuplanen, oder"dfs"für die neuesten zuerst. Die Priorität hat weiterhin Vorrang. Parallel verarbeitete Seiten können in einer anderen Reihenfolge fertig werden. (Siehe Dokumentation)
🐛 Fehlerbehebungen¶
- Verbessertes Lösen von Cloudflare-Prüfungen durch Erkennung verzögert erscheinender Widgets, weniger unnötige Wartezeiten und begrenzte Wiederholungsschleifen für passive Prüfungen und versteckte Frames. Behebt #468 und #509.
- Browser-Start aus einer Windows-Shell mit Administratorrechten korrigiert. Behebt #463.
- Integrierte Stealth-Flags bleiben beim Hinzufügen eigener Browser-Flags erhalten, von @alkaz-nodemaven in #430.
- Verbessertes Parsen der Zeichensatzangaben in Browser-Antworten, auch bei unterschiedlicher Groß- und Kleinschreibung, Leerzeichen oder Werten in Anführungszeichen.
-
Das Fehlen einer Cloudflare-Prüfung wird nicht mehr als Fehler protokolliert, wenn keine Prüfung gelöst werden muss. Behebt #459.
-
Anfrage-Fingerprints korrigiert für URL-Parameter von @yetval in #448, leere oder als falsch ausgewertete JSON-Körper von @ac1982 in #480 und die Einfügereihenfolge der Header von @SarwadnyaMahajan in #466.
- Unbeabsichtigte Übernahme von Anfragedaten beim Folgen von Links behoben, einschließlich veralteter Header für den Anfragekörper, von @yetval in #462.
- Blockierte Antworten werden nicht mehr als erfolgreiche Einträge im Entwicklungscache gespeichert, von @Kuang-xianxin in #446.
- Checkpoint-Dateien bleiben erhalten, wenn ein Crawl mit einer Ausnahme fehlschlägt, von @SulimanAbdulrazzaq in #486.
- Fehlerbehandlung für robots.txt korrigiert, damit fehlgeschlagene Abfragen nicht als Erlaubnis zum Crawlen zwischengespeichert werden, von @prateekraawat1 in #443.
- Link-Extraktion mit einschränkenden Selektoren korrigiert, einschließlich leerer Treffer und Selektoren, die das Link-Element selbst auswählen, von @SulimanAbdulrazzaq in #452 und #483.
- Auswahl der Sitemap-Callbacks korrigiert, von @SulimanAbdulrazzaq in #458, sowie XML-Parsing mit Kommentaren oder Verarbeitungsanweisungen, von @sup3dev in #450.
- Führende Byte-Reihenfolgemarkierungen in robots.txt und CSV-Feeds werden berücksichtigt, von @SulimanAbdulrazzaq in #453.
-
Behandlung von
stealthy_headersin HTTP-Sitzungen von Spidern korrigiert: Die Option wird an die Sitzung statt direkt ancurl_cffiübergeben, von @Yigtwxx in #475. -
Formularkodierung von Dictionaries für Listen- und Tupelwerte korrigiert, unter Beibehaltung des Vorrangs der Anfragekörper und der bisherigen Behandlung von
None, mit Beiträgen von @SulimanAbdulrazzaq in #485. - Zusammenführen von HTTP-Headern aus Sitzung und einzelner Anfrage ohne Beachtung der Groß- und Kleinschreibung korrigiert, von @SulimanAbdulrazzaq in #487.
- Behoben: CLI-Anfragen verwarfen leere oder als falsch ausgewertete JSON-Körper ohne Hinweis, von @SulimanAbdulrazzaq in #484.
- Markdown- und Textdateien werden nun durchgängig als UTF-8 exportiert. Konvertierungsfehler kürzen bestehende Ausgabedateien nicht mehr, von @SulimanAbdulrazzaq in #488.
-
Behandlung der User-Agent- und Proxy-Optionen von curl in
curl2fetcher()korrigiert, von @SulimanAbdulrazzaq in #490. -
Zusammenlaufende Markdown-Blöcke korrigiert, wenn mehrere ausgewählte Elemente mit
Response.markdown()oder der CLI-Extraktion umgewandelt werden, mit Beiträgen von @Yigtwxx in #432. - Bereinigung versteckter Inhalte für KI-Ausgaben korrigiert, um sichtbare Inhalte wie
opacity:0.95beizubehalten, weitere versteckende Stile zu erkennen und versteckte Slots zu entfernen, mit Beiträgen von @Yigtwxx in #460. - Behoben: Das Entfernen störender Tags brach bei verschachtelten Tags zu früh ab, von @Yigtwxx in #474.
- Generierte CSS- und XPath-Selektoren für das erste von mehreren Geschwisterelementen mit demselben Tag korrigiert, von @yellow-dog-dog in #495.
- Eine Veraltungswarnung des lxml-HTML-Parsers behoben, von @afsuyadi in #493.
Dokumentation¶
- Die gesamte Website spricht jetzt zehn Sprachen: Englisch, Arabisch, Spanisch, brasilianisches Portugiesisch, Französisch, Deutsch, vereinfachtes Chinesisch, Japanisch, Russisch und Koreanisch. Leitfäden, API-Referenzen, Tutorials und der Änderungsverlauf sind übersetzt. Arabisch unterstützt die Leserichtung von rechts nach links. Beim Sprachwechsel bleiben Seite und Abschnitt erhalten.
- Klarere Leitfäden, README-Beispiele und Einrichtungsschritte, die Checkpoint-Daten, Browser-Kodierungen, gespeicherten Zustand, Netzwerkverlauf, Shadow DOM und Crawl-Reihenfolge abdecken.
- Den Agent Skill aktualisiert, einschließlich Beispielen, Referenzen und herunterladbarem Archiv, für die aktuellen Browser- und MCP-Werkzeuge.
- Den Änderungsverlauf auf die Website verschoben und Zugriff auf den Markdown-Quelltext jeder Seite hinzugefügt.
Projekt¶
- Scraplings Logo, Titelbilder und Website-Darstellung erneuert.
- Tests für Browser-Aktionen, Dialoge, Extraktion, Screenshots, JavaScript, Netzwerkaufzeichnung, Zustandsdateien, Shadow DOM und Crawler-Korrekturen erweitert.
- Einen Marker für Browser-Tests und getrennte Läufe für Browser-, asynchrone und parallele Tests hinzugefügt. Windows-Kompatibilität der Checkpoint- und CSV-Tests verbessert, von @diegobravtraps-oss in #457.
- Gemeinsame Build-Konfiguration der mehrsprachigen Dokumentation und Hinweise für Beiträge aktualisiert.
v0.4.15 - 2026-08-23¶
Eine der größten Veröffentlichungen dieses Jahres: ein überarbeiteter MCP-Server, Markdown für RAG mit einer Zeile Code, besseres Lösen von Cloudflare-Prüfungen und Browser-Tabs, die für die Automatisierung offen bleiben 🚀
Warnung
Diese Version enthält inkompatible Änderungen am MCP-Server. Lesen Sie vor dem Update den Abschnitt zu den inkompatiblen Änderungen.
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Browser-Tabs bleiben jetzt offen und werden für weitere Anfragen wiederverwendet (siehe Dokumentation):
- Alle Browser-Sitzungen behalten ihre Tabs nach einer Anfrage. Die nächste Anfrage nutzt einen freien Tab, statt einen neuen zu öffnen.
- Jede Anfrage wendet ihre eigenen Einstellungen (Zeitlimits, Header und Ressourcensperren) erneut auf den zugewiesenen Tab an. So gelangen keine Einstellungen von einer Anfrage in die nächste.
- Tabs mit Fehlern werden geschlossen und ersetzt. Die neue Methode
close_pages()schließt alle offenen Tabs. - Die abgerufene Seite bleibt geladen. Eine Funktion
page_setupin der nächsten Anfrage läuft deshalb auf dieser Seite, bevor der Browser zu einer anderen wechselt. Damit lassen sich Automatisierungsschritte über mehrere Anfragen verknüpfen.
-
Wandeln Sie jede Seite mit
Response.markdown()in sauberes Markdown für LLMs um (siehe Dokumentation):from scrapling.fetchers import Fetcher markdown = Fetcher.get("https://example.com").markdown(main_content_only=True)- Skripte, Stile und versteckte Inhalte für Prompt Injection werden immer zuerst entfernt, mit derselben Bereinigung wie im MCP-Server.
- Übergeben Sie
css_selector, um nur die benötigten Elemente umzuwandeln. - Verfügbar über das neue Extra
rag(pip install "scrapling[rag]"), das auch in den Extrasai/shell/allenthalten ist.
-
Neue Vorlage
SiteToMarkdownSpider, um eine ganze Website zu crawlen und eine Markdown-Sammlung für RAG-Pipelines zu erstellen (siehe Dokumentation):from scrapling.spiders import SiteToMarkdownSpider class DocsSpider(SiteToMarkdownSpider): name = "docs" start_urls = ["https://example.com/docs/"] allowed_domains = {"example.com"} output_dir = "docs_markdown" result = DocsSpider().start() result.items.to_jsonl("docs.jsonl")- Liefert einen Datensatz pro Seite mit
url/title/markdown. Der optionale Parameteroutput_dirschreibt eine Markdown-Datei pro Seite. max_pagesbegrenzt den Crawl. Da die Vorlage aufCrawlSpideraufbaut, haben Sie durch Überschreiben vonrules()volle Kontrolle über die verfolgten Links.
- Liefert einen Datensatz pro Seite mit
-
Der MCP-Server wurde überarbeitet (inkompatible Änderung) (siehe inkompatible Änderungen und Dokumentation):
- Die 13 Werkzeuge sind jetzt in zwei Modi aufgeteilt: Werkzeuge für einzelne Aufrufe (
fetch,bulk_fetch,stealthy_fetch,bulk_stealthy_fetch), die immer ihren eigenen Browser starten und ihre tatsächlichen Standardwerte anzeigen, sowie Sitzungswerkzeuge, die eine einmal geöffnete Sitzung nutzen. - Das neue Werkzeug
session_fetchruft Seiten über eine Browser-Sitzung ab.open_sessionenthält jetzt nur noch Einstellungen auf Browser-Ebene und gibt dem KI-Agenten die tatsächlich verwendeten Einstellungen der Sitzung zurück. - Das Werkzeug
getwurde inmake_requestumbenannt und unterstützt jetzt jede HTTP-Methode. - Die neuen Werkzeuge
open_request_sessionundsession_make_requestgeben der KI dauerhafte HTTP-Sitzungen, die Cookies und den Browser-Fingerprint zwischen Anfragen behalten. - Damit setzen Abrufe auch nicht mehr die Sitzungseinstellungen zurück. Dieses Problem wurde zuerst von @Yigtwxx in #418 behoben.
- Die 13 Werkzeuge sind jetzt in zwei Modi aufgeteilt: Werkzeuge für einzelne Aufrufe (
-
Der HTTP-Transport des MCP-Servers erfordert jetzt eine Authentifizierung und lauscht standardmäßig auf localhost (inkompatible Änderung), von @yamantaka-singh in #414 (behebt #413, siehe Dokumentation):
- Übergeben Sie
--auth-token(oder die UmgebungsvariableSCRAPLING_MCP_AUTH_TOKEN), um ein Bearer-Token zu verlangen. Mit--no-authbetreiben Sie den Server bewusst ohne Authentifizierung. - Übergeben Sie
--host 0.0.0.0, um Verbindungen aus dem Netzwerk anzunehmen.
- Übergeben Sie
🐛 Fehlerbehebungen¶
- Cloudflare Turnstile/Interstitial wird jetzt unabhängig von den Sprach- und Regionseinstellungen des Browsers gelöst. Interaktive Prüfungen im Headless-Modus führen nicht mehr zu Endlosschleifen. Seiten im getarnten Browser stürzen auch nicht mehr während der Lösung ab, mit Beiträgen von @subediparas5 in #412. (Behebt #411 und #422)
- Behoben:
find/find_allmitclass_übersahen ohne Hinweis Elemente mit mehreren Klassen, von @yetval in #410, sowie leereclass_-Werte und nicht maskierte CSS-Zeichenfolgen, von @yamantaka-singh in #417. - Behoben: Antworten aus dem Cache verloren beim erneuten Verwenden im
development_modedie Metadaten der Anfrage, von @Yigtwxx in #419. - Behoben: HTTP-Anfragen mit
retriesunter 1 schlugen fehl, ohne die Anfrage zu senden, von @Yigtwxx in #420.
Dokumentation¶
- Die Website-Bereiche wurden neu geordnet: Der neue Bereich „Mit KI verwenden“ enthält den MCP-Server, die neue Seite zum Agent Skill und die Anleitung zum Aufbau von RAG-Systemen. Die Anleitung zum Wechsel von BeautifulSoup steht jetzt neben der Scrapy-Integration unter „Integrationen und Migrationen“.
- Ein Änderungsverlauf wurde hinzugefügt, der die Hinweise zu allen bisher veröffentlichten Versionen im Repository enthält.
v0.4.14 - 2026-08-10¶
Ein schnelles Wartungsupdate zur Behebung der Installation mit uv 🔧
🐛 Fehlerbehebungen¶
- Behoben:
uvweigerte sich standardmäßig, v0.4.13 zu installieren, und wechselte ohne Hinweis zu einer älteren Version. Die vorherige Version verlangte eine Vorabversion voncurl_cffi.uverlaubt das nur, wenn es ausdrücklich aktiviert wird. Alle Abhängigkeiten lassen sich jetzt mit stabilen Versionen auflösen. (Behebt #407)
v0.4.13 - 2026-08-09¶
Ein neues Update mit Feed-Spidern und einem intelligenteren MCP-Server 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Neue Spider-Vorlagen für Feeds.
XMLFeedSpiderdurchläuft die Knoten beliebiger XML-Feeds (RSS, Atom, Produkt-Feeds usw.), undCSVFeedSpiderdurchläuft CSV-Zeilen als Dictionaries. Beide entpacken mit gzip komprimierte Feeds automatisch. (Siehe Dokumentation)
from scrapling.spiders import XMLFeedSpider
class RSSSpider(XMLFeedSpider):
name = "rss"
start_urls = ["https://example.com/feed.xml"]
async def parse_node(self, response, node):
yield {"title": node.findtext("title"), "link": node.findtext("link")}
result = RSSSpider().start()
- Der MCP-Server wurde auf MCP SDK v2 umgestellt und verbessert. Er enthält jetzt Anweisungen, die Ihrem KI-Agenten die effiziente Nutzung der Werkzeuge erklären. Jedes Werkzeug gibt Annotationen an, damit Clients wie Claude Code rein lesende Werkzeuge automatisch genehmigen können. Kürzere Beschreibungen sparen Tokens, und der Server meldet seine Version und sein Logo an MCP-Clients. (Siehe Dokumentation)
- Der Befehl
scrapling-mcpwurde hinzugefügt. Er führt direktscrapling mcpaus. So lässt sich Scrapling mit einer Zeile bei MCP-Clients und Verzeichnissen registrieren, die einen einzelnen Befehl erwarten. - Playwright/Patchright und Browser sind nicht mehr auf feste Versionen begrenzt. Der erzeugte User-Agent passt jetzt immer genau zur Chromium-Version, die Ihre installierte Version von Playwright/Patchright steuert. Deshalb legt Scrapling deren Versionen nicht mehr fest, und Sie können sie frei aktualisieren. Führen Sie nach dem Update
scrapling install --forceaus, um die Browser zu aktualisieren.
🐛 Fehlerbehebungen¶
- Behoben: Der Import von Scrapling brach mit einem ValueError von
browserforgeab, wenn das Datenpaket für Fingerprints hinter den Browser-Versionen zurücklag. (Behebt #394, #396 und #400) - Falsche Größen der Seiten-Pools in den MCP-Browser-Werkzeugen für Stapelabrufe wurden korrigiert. Wegen dieses Fehlers schlug
bulk_fetchbei mehr als 50 URLs fehl, undbulk_stealthy_fetchrief alle URLs über einen einzigen Tab ab. Von @Yigtwxx in #393.
Projekt¶
- Neue Richtlinie für KI-gestützte Beiträge: Beiträge mit KI-Unterstützung sind willkommen, müssen aber im PR oder Issue gekennzeichnet werden. Beiträge, die ohne Kennzeichnung nach KI-Ausgaben aussehen, erhalten ein Label und werden geschlossen.
v0.4.12 - 2026-07-26¶
Eine Version, mit der Ihre Spider intelligenter auf die gecrawlten Websites reagieren
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Spider können ihre Geschwindigkeit jetzt mit AutoThrottle selbst anpassen. Statt einen
download_delayzu schätzen, der entweder zu langsam ist oder zu einer Sperre führt, misst der Spider die Antwortgeschwindigkeit jeder Website und passt die Wartezeit pro Domain selbst an. Sobald eine Website Sie sperrt oder die Anfragerate begrenzt, verdoppelt er die Wartezeit (oder wartet genau so lange, wie der HeaderRetry-Afterverlangt), bis das aufhört. Danach wird er wieder schneller. Ihrdownload_delayund jederCrawl-delayaus robots.txt gelten weiterhin als Mindestwert. (Siehe Dokumentation) -
Exportieren Sie Ihre Ergebnisse als CSV und XML, zusätzlich zu den bisherigen JSON/JSONL-Exporten. Auch Datensätze mit unterschiedlichen Schlüsseln werden ohne Verluste exportiert. Verschachtelte Werte werden als JSON geschrieben. (Siehe Dokumentation)
-
Der MCP-Server kann jetzt eine Authentifizierung verlangen. So können Sie ihn sicher bereitstellen, statt ihn nur auf Ihrem eigenen Rechner zu betreiben. Jede Anfrage ohne Token wird abgelehnt. Sie können auch einschränken, auf welche Hostnamen der Server antwortet. (Siehe Dokumentation)
-
Browser akzeptieren jetzt CDP-URLs über HTTP, nicht nur über WebSocket. Neben den
wss://-Endpunkten verwalteter Browser-Anbieter können Sie jeden Browser-Fetcher oder jede MCP-Sitzung mit einem selbst gestarteten Chrome mit--remote-debugging-port=9222verbinden. -
Veröffentlichte Docker-Images tragen jetzt ein Tag mit ihrer Versionsnummer, statt nur
latest. So können Sie genau die gewünschte Version festlegen. Von @JanRK in #384.
🐛 Fehlerbehebungen¶
-
Behoben: Antworten aus dem Cache verloren alle Cookies, wenn sie von einem Browser kamen. Dadurch funktionierte im Entwicklungsmodus der Spider die Sitzungs- oder Authentifizierungslogik, die diese Cookies brauchte, ohne Hinweis nicht mehr. Von @amitvijapur in #379. (Behebt #376)
-
Behoben:
StealthyFetchererzwang die Regionseinstellungen-USfür jeden Browser, statt die Systemeinstellung zu übernehmen. Websites erkannten dadurch einen Widerspruch zwischen Ihren Sprach- und Regionseinstellungen und Ihrer IP-Adresse und stuften Sie als verdächtig ein. Google antwortete zum Beispiel mit 429. (Behebt #381) -
Eine irreführende Fehlermeldung im Speichersystem wurde korrigiert, und ein ungenutzter Aufruf nach Einfügevorgängen wurde entfernt. Von @fix2015 in #377.
Leistung¶
- Die Laufzeit von
get_all_text()wächst jetzt proportional zur Anzahl der Knoten, O(nodes), statt die Vorfahren jedes einzelnen Textknotens zu durchlaufen. Das macht die Methode auf tief verschachtelten Seiten etwa 5-6-mal schneller. Von @yetval in #378.
v0.4.11 - 2026-07-12¶
Ein großes Update mit der ersten Spider-Vorlage für eine Plattform, einem schnelleren Parser und wichtigen Fehlerbehebungen 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
ShopifySpider, die erste Spider-Vorlage für eine Plattform, wurde hinzugefügt! Extrahieren Sie alle Produkte eines Shopify-Shops über dessen JSON-API, ohne das HTML der Website zu verwenden. Erstellen Sie eine Unterklasse, setzen Sie die Shop-Domain, und schon sind Sie fertig (siehe Dokumentation)
from scrapling.spiders import ShopifySpider
class MyStore(ShopifySpider):
target_website = "example.com"
result = MyStore().start()
--executable-pathwurde zu den Browser-Befehlen der CLI hinzugefügt. Sowohlscrapling extract fetchals auchscrapling extract stealthy-fetchakzeptieren jetzt eine eigene ausführbare Browser-Datei, die mit Chromium kompatibel ist. Ohne diese Option verwenden sie die UmgebungsvariableSCRAPLING_EXECUTABLE_PATH. Damit bieten sie denselben Funktionsumfang wie der MCP-Server (löst #371)
🤖 Verbesserungen der Bedienung¶
find_by_textundfind_by_regexsind jetzt bis zu etwa 2-mal schneller, wennfirst_matchaktiviert ist (Standard). Elemente werden erst bei Bedarf in Objekte umgewandelt, sodass die Suche beim ersten Treffer endet. Von @yetval in #370- Die Benchmarks wurden mit neuen Zahlen und den neuesten Versionen aller Bibliotheken aktualisiert.
- Die Beitragsregeln wurden aktualisiert
🐛 Fehlerbehebungen¶
- Abstürze der Abrufwerkzeuge des MCP-Servers auf Seiten mit Steuerzeichen wurden behoben. Dabei erschien der Fehler
All strings must be XML compatible. Von @yetval in #368 (behebt #366)
v0.4.10 - 2026-07-04¶
Ein neues Update mit einer neuen Scrapy-Integration und mehreren Korrekturen aus der Community 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Eine Scrapy-Integration wurde hinzugefügt, damit Sie die Parsing-API von Scrapling in vorhandenen Scrapy-Projekten nutzen können, ohne sie neu zu schreiben. Setzen Sie den Dekorator
scrapling_responseauf einen Spider-Callback. Die empfangene Antwort wird dann zu einerResponsevon Scrapling, während Scrapy weiterhin den Crawl steuert (siehe Dokumentation):import scrapy from scrapling.integrations.scrapy import scrapling_response class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = ["https://quotes.toscrape.com"] @scrapling_response def parse(self, response): # `response` is now a Scrapling Response first_quote = response.find_by_text("The world as we have created it", partial=True) for quote in [first_quote, *first_quote.find_similar()]: yield {"text": quote.get_all_text(strip=True)} -
Der MCP-Server kann jetzt einen eigenen, mit Chromium kompatiblen Browser nutzen, und zwar für alle Browser-Werkzeuge. Legen Sie ihn einmal mit
scrapling mcp --executable-path "/path/to/chromium"oder der UmgebungsvariableSCRAPLING_EXECUTABLE_PATHfest, oder pro Anfrage mit dem Argumentexecutable_path. Von @samrusani in #360 (löst #347) - Alle Browser und Fingerprints wurden aktualisiert. Führen Sie nach dem Update
scrapling install --forceaus, um sie zu erneuern.
🐛 Fehlerbehebungen¶
- Unlesbarer Text (Mojibake) von Browser-Fetchern auf Websites ohne UTF-8 wurde behoben, von @yehudalevy-collab in #365 (behebt #364).
- Behoben:
LinkExtractorfilterte zusammengesetzte Dateiendungen wie.tar.gznicht, von @renbkna in #359 (behebt #349). - Der Verlust laufender Anfragen in Checkpoints pausierter Crawls wurde behoben. Beim Fortsetzen werden sie jetzt nicht mehr übersprungen, von @yetval in #358.
- Falsch berechnete Crawl-Wartezeiten aus den robots.txt-Regeln
Request-ratewurden behoben, durch das Protego-Update und angepasste Tests von @Disaster-Terminator in #355.
Dokumentation¶
- Das Zusammenspiel von
init_scriptmit dem isolierten Ausführungskontext von Patchright im Stealth-Modus wurde erklärt, von @mturac in #353 (löst #350). - Die Installation des Agent Skills über skills.sh wurde hinzugefügt, von @ob-aion in #363.
v0.4.9 - 2026-06-07¶
Ein Wartungsupdate mit vielen Fehlerbehebungen zu Meldungen aus der Community 🛠️
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Alle Browser und Fingerprints wurden aktualisiert. Führen Sie nach dem Update
scrapling install --forceaus, um sie zu erneuern. - Die Option
--versionwurde zur CLI hinzugefügt, von @ETM-Code in #303 (löst #299)
🐛 Fehlerbehebungen¶
- Behoben: Das Argument
proxyauf Sitzungsebene wurde in HTTP-Sitzungen ohne Hinweis ignoriert, wodurch Ihre echte IP sichtbar werden konnte (löst #295). Wenn Sie jetzt einenproxyauf Sitzungsebene mit dem Argumentproxiespro Anfrage kombinieren (oder umgekehrt), wird ein Fehler ausgelöst. Es wird nicht mehr eines der Argumente ohne Hinweis verworfen. - Fehler bei der Browser-Navigation beim Kombinieren von
init_scriptmituser_data_dirwurden behoben (löst #294). - Die Erkennung der Zeichenkodierung wurde korrigiert, wenn Websites den charset-Wert im Header
Content-Typein Anführungszeichen setzen, von @Bortlesboat in #323. - Ein
IndexErrorbeim adaptiven Wiederfinden von Elementen mit aktiviertemauto_savewurde behoben, von @Mubashirrrr in #340. - Abstürze beim Speichern von Checkpoints und Cache der Spider unter Windows wurden behoben, von @MrStarkEG in #344.
- Falsche Ähnlichkeitswerte in
find_similarfür Elemente mit unterschiedlich vielen Attributen wurden korrigiert (löst #322).
Dokumentation¶
- Es wurde klargestellt, dass die Standardinstallation nur den Parser enthält und Fetcher sowie Spider die Extras benötigen (löst #343).
- Der Name des Docker-Images wurde in den übrigen Beispielen korrigiert, von @evanclan in #315.
- Ein defekter Link in der Beitragsanleitung wurde korrigiert, von @Bortlesboat in #320.
v0.4.8 - 2026-05-11¶
Ein großes Spider-Update, das das Crawl-System weiter verbessert 🕷️
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Das Werkzeug
LinkExtractorwurde hinzugefügt, unterscrapling.spiders.LinkExtractor, um URLs aus einerResponsezu lesen. Es bietet viele Einstellmöglichkeiten (siehe Dokumentation) -
Die allgemeinen Spider-Vorlagen
CrawlSpiderundCrawlRulewurden hinzugefügt. Sie müssen damit nicht mehr immer denselben Code für „Links verfolgen, die zu diesem Muster passen“ schreiben. Überschreiben Sierules(), um eine Liste vonCrawlRule-Objekten zurückzugeben, die jeweils mit einemLinkExtractorverbunden sind. (Siehe Dokumentation)from scrapling.spiders import CrawlSpider, CrawlRule, LinkExtractor class QuotesSpider(CrawlSpider): name = "blog" start_urls = ["https://quotes.toscrape.com/"] def rules(self): return [ CrawlRule(LinkExtractor(allow=r"/author/"), callback=self.parse_author), CrawlRule(LinkExtractor(allow=r"/page/\d+/")), # pagination, no callback ] async def parse_author(self, response): yield { "name": response.css(".author-title::text").get(), "birthday": response.css(".author-born-date::text").get(), "url": response.url, } -
Die Vorlage
SitemapSpiderwurde hinzugefügt. Sie startet einen Crawl direkt aus einer Sitemap oder über URLs zurobots.txt-Dateien. Sie verarbeitet gzip-komprimierte Sitemaps und bietet viele Einstellmöglichkeiten. URLs werden über die Crawl-Regeln zugeordnet, wie oben für CrawlSpider gezeigt. (Siehe Dokumentation)from scrapling.spiders import SitemapSpider, CrawlRule, LinkExtractor class NewsSitemap(SitemapSpider): name = "news" sitemap_urls = ["https://example.com/robots.txt"] def rules(self): return [ CrawlRule(LinkExtractor(allow=r"/articles/"), callback=self.parse_article), ] async def parse_article(self, response): yield {"url": response.url, "title": response.css("h1::text").get()} -
Das adaptive Wiederfinden nutzt jetzt in allen Methoden standardmäßig eine Ähnlichkeitsschwelle von 40 % statt
0. Dadurch arbeitet die adaptive Funktion besser. Wenn kein Element den Grenzwert überschreitet, zeigt eine Warnung jetzt den höchsten gefundenen Wert an. So können Siepercentagebei Bedarf bewusst senken. -
Alle Browser und Fingerprints wurden aktualisiert. Führen Sie nach dem Update erneut
scrapling install --forceaus, um die Browser und Fingerprints zu erneuern.
🐛 Fehlerbehebungen¶
- Behoben:
Fetcher.configure(...)wurde nicht auf Aufrufe einzelner Anfragen angewendet. Dieselbe Korrektur gilt fürAsyncFetcher. - Falsche Anfrage-Fingerprints, die zu doppelten Anfragen in Spidern führten, wurden korrigiert, von @yetval in #255.
- Die adaptive Scraping-Engine warnt jetzt bei schwachen Übereinstimmungen. Zusammen mit der geänderten Schwelle erhalten Sie bei fehlgeschlagenem Wiederfinden jetzt eine Warnung statt eines irreführenden Elements als „beste Schätzung“.
Dokumentation¶
- Ältere Codebeispiele wurden in der gesamten Dokumentation aktualisiert, damit sie zur aktuellen Version passen.
- Das Kopieren und Einfügen von Code auf der Dokumentationswebsite wurde verbessert, und der Agent Skill wurde gekürzt, damit er bei jedem Aufruf weniger Tokens benötigt.
v0.4.7 - 2026-04-17¶
Ein Update, mit dem Ihre KI-Agenten Seiten sehen können 📸
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Das MCP-Werkzeug
screenshotwurde hinzugefügt. Es erstellt ein Bild der Seite und gibt es als echten MCP-Block vom TypImageContentzurück, damit das Modell es sehen kann. Das Werkzeug braucht eine offene Browser-Sitzung. Rufen Sie daher zuerstopen_sessionauf (mitdynamicoderstealthy) und übergeben Sie hier diesession_id. Unterstützt werden PNG und JPEG, Aufnahmen ganzer Seiten, JPEG-Qualität und die üblichen Warteeinstellungen (wait,wait_selector,network_idle,timeout). (Setzt #244 um) - Ein eigener Parameter
session_idwurde zuopen_sessionhinzugefügt. So können Sie Sitzungen sinnvoll benennen ("search","checkout"), statt den zufälligen hexadezimalen Standardwert mit 12 Zeichen zu nutzen. Von @hauntedhost in #243
🐛 Fehlerbehebungen¶
- Fehler im Zustand von
FetcherSessionund ein Absturz beim Schließen einer verzögert gestarteten Sitzung wurden behoben. Von @yetval in #245 TypeError: Session.request() got an unexpected keyword argument 'block_ads'wurde behoben, wenn die CLI-Option--ai-targetedmit HTTP-Befehlen verwendet wird. Von @voidborne-d in #249 (behebt #247)
Übersetzungen¶
- Eine brasilianisch-portugiesische Übersetzung der README wurde hinzugefügt, von @rgomids in #250
v0.4.6 - 2026-04-13¶
Ein Update mit Schwerpunkt auf Browser-Tarnung, Datenschutz und der Arbeit von Entwicklern 🔒
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Integrierter Werbeblocker für Browser-Fetcher hinzugefügt. Übergeben Sie
block_ads=True, um Anfragen an etwa 3.500 bekannte Werbe- und Tracking-Domains direkt beim Abfangen der Route zu blockieren: kein DNS, kein TCP, sofortiger Abbruch. Mitblocked_domainskönnen Sie eigene Listen ergänzen. Der MCP-Server und der CLI-Modus--ai-targetedschalten dies automatisch ein, um Tokens zu sparen und Seiten schneller zu laden. -
Unterstützung für DNS-over-HTTPS hinzugefügt, um DNS-Lecks bei der Nutzung von Proxys zu vermeiden. Übergeben Sie
dns_over_https=True, um DNS-Anfragen über Cloudflares DoH-Dienst zu leiten. So wird Ihr echter Standort nicht durch die DNS-Auflösung sichtbar, auch wenn Ihr HTTP-Verkehr durch einen Proxy läuft. -
Der Callback
page_setupwurde für Browser-Fetcher hinzugefügt. Diese Funktion läuft vorpage.goto(). Damit können Sie Ereignis-Listener, Routen oder Skripte registrieren, die vor der Navigation eingerichtet sein müssen. Sie ergänztpage_action(wird nach der Navigation ausgeführt). (Löst #237) -
Die CLI-Optionen
--block-adsund--dns-over-httpswurden hinzugefügt, sowohl fürfetchals auch fürstealthy-fetch.
🐛 Fehlerbehebungen¶
- Der Typalias
Secondswurde korrigiert, der Dezimalwerte ablehnte.wait=1.5odertimeout=500.0verursachten bei Browser-Fetchern einen Typfehler, weil der Aliasfloatfälschlich als Metadaten statt als Typ behandelte. Von @kuishou68 in #240 - Doppelte ID-Abschnitte beim Erzeugen vollständiger Selektorpfade wurden behoben. Bei Elementen mit
id-Attributen wurde der Selektor beim Erzeugen vollständiger CSS/XPath-Pfade doppelt angehängt. Das führte zu Selektoren wiebody > #main > #main > #target > #target. Auch alleinstehende Bedingungen wie[@id='x'](ungültiges XPath) statt*[@id='x']in vollständigen XPath-Pfaden wurden korrigiert. Von @sjhddh in #241 - Fehlende Parameter in den Shell-Signaturen wurden ergänzt. In den Funktionssignaturen der interaktiven Shell fehlten
blocked_domains,block_ads,retries,retry_delay,capture_xhr,executable_pathunddns_over_https.
v0.4.5 - 2026-04-07¶
Ein Update mit einer großen Erleichterung für Spider-Entwickler und einigen wichtigen Fehlerbehebungen 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
-
Entwicklungsmodus für Spider: Änderungen an der
parse()-Logik eines Spiders erforderten bisher bei jedem Lauf neue Zugriffe auf die Zielserver. Das ist langsam, erzeugt unnötigen Verkehr und kann dazu führen, dass der Server Ihre Anfragerate begrenzt, während Sie noch an den Selektoren arbeiten. Der neue Entwicklungsmodus speichert beim ersten Lauf jede Antwort auf der Festplatte und liest sie bei späteren Läufen wieder von dort. So können Sie Ihre Callbacks ändern und beliebig oft neu starten, ohne eine einzige Netzwerkanfrage zu senden. Aktivieren Sie ihn mit einem Klassenattribut:class MySpider(Spider): name = "my_spider" start_urls = ["https://example.com"] development_mode = True async def parse(self, response): yield {"title": response.css("title::text").get("")}Der Cache liegt standardmäßig unter
.scrapling_cache/{spider.name}/. Mitdevelopment_cache_dirkönnen Sie ihn an einen anderen Ort verlegen. Zwei neue Zähler,cache_hitsundcache_misses, zeigen die Cache-Nutzung. Beim Lesen aus dem Cache werdendownload_delay, Begrenzungen der Anfragerate und erneute Versuche für gesperrte Anfragen übersprungen. So sind die Testläufe so schnell, wie die Festplatte es zulässt. Setzen Siedevelopment_mode = Truenicht im Produktivbetrieb ein. Das ist ein Entwicklungswerkzeug, kein Produktions-Cache. Alle Einzelheiten stehen in der Dokumentation. -
Sicherere Weiterleitungen als Standard:
follow_redirectshat jetzt bei allen HTTP-Fetchern, im MCP-Server und in der Shell den Standardwert"safe". Weiterleitungen werden weiterhin verfolgt, aber Ziele mit internen oder privaten IP-Adressen (Loopback, private Netzwerke, Link-Local) werden abgelehnt. Das schützt vor SSRF beim Scraping von URLs, die Benutzer eingeben. Übergeben Siefollow_redirects="all"für das bisherige Verhalten oderFalse, um Weiterleitungen ganz abzuschalten.
🐛 Fehlerbehebungen¶
- Ein erzwungener Stopp verliert Ihren Checkpoint nicht mehr: Zweimaliges Drücken von Ctrl+C (erzwungener Stopp) bei einem Spider mit aktiviertem
crawldirkonnte bisher mit dem Schreiben des Checkpoints kollidieren. Der Cancel-Scope beendete die Aufgabe, bevor das Pickle fertig war. Dabei bliebpaused=Falsegesetzt und die Bereinigung wurde ausgelöst, die den vorherigen Checkpoint löscht. Bei einem langen Crawl konnte so der gesamte Fortschritt verloren gehen, den Sie gerade sichern wollten. Die Engine schreibt den Checkpoint jetzt vor dem Aufruf voncancel_scope.cancel(). So bleibt bei einem erzwungenen Stopp immer der neueste ausstehende Zustand erhalten. Von @voidborne-d in #230.
v0.4.4 - 2026-04-05¶
Ein neues Update mit wichtigen Spider-Verbesserungen und Fehlerbehebungen 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Das Spider-System beachtet jetzt robots.txt über die neue Option
robots_txt_obey. Wenn sie aktiviert ist, ruft der Spider robots.txt vor dem Crawl automatisch ab und hält sich an die Regeln, darunterDisallow,Crawl-delayundRequest-rate. Die robots.txt-Dateien werden parallel abgerufen und pro Domain für den gesamten Crawl im Cache gespeichert. Von @AbdullahY36 in #226 - Der robots.txt-Cache wird jetzt vorab gefüllt. Alle robots.txt-Dateien der Domains aus start_urls werden vor Beginn der Crawl-Schleife abgerufen und geparst. So gibt es bei der ersten Anfrage an eine Domain keine zusätzliche Wartezeit.
- Die neue Statistik
robots_disallowed_countwurde zuCrawlStatshinzugefügt, um die während eines Crawls durch robots.txt-Regeln blockierten Anfragen zu zählen.
Weitere Informationen finden Sie auf der Website hier
🐛 Fehlerbehebungen¶
- Ein schwerwiegendes MRO-Problem mit
ProxyRotatorwurde behoben: Die Platzhaltermethode_build_context_with_proxyverdeckte die tatsächliche Implementierung der Unterklassen. Dadurch löste die Proxy-Rotation immerNotImplementedErroraus (behebt #215). Danke, @yetval - Ein Leck im Seiten-Pool wurde behoben, das bei Proxy-Rotation pro Anfrage in Browser-Sitzungen auftrat. Seiten aus temporären Kontexten wurden bei der Bereinigung nicht aus dem Pool entfernt, sodass sich mit der Zeit veraltete Referenzen ansammelten. Von @yetval in #223
- Eine fehlende Typprüfung im statischen Fetcher wurde ergänzt.
curl_cffikonnte den WertNoneaussession.request()zurückgeben, was später zu Fehlern führte.
Weitere Änderungen¶
- Die Abhängigkeiten wurden aktualisiert, einschließlich der neuesten Fingerprints und weiterer Bestandteile.
protegowurde als neue Abhängigkeit in der optionalen Gruppefetchershinzugefügt, um robots.txt zu parsen.
v0.4.3 - 2026-03-30¶
Ein neues Update mit vielen wichtigen Änderungen 🎉
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Ein neues MCP-Werkzeug wurde hinzugefügt, um einen dauerhaften normalen oder getarnten Browser zu öffnen und mit den anderen Werkzeugen weiterzuverwenden. Ein weiteres neues Werkzeug schließt ihn. (Beispiele)
- Ein neues MCP-Werkzeug wurde hinzugefügt, das alle vorhandenen Browser-Sitzungen auflistet. Es ist für die Nutzung mit den neuen Werkzeugen gedacht.
- Eine neue Option für Browser-Sitzungen wurde hinzugefügt, die während einer Anfrage automatisch alle Hintergrundanfragen sammelt (löst #159) [Beispiele].
- Eine neue Bereinigung wurde hinzugefügt, um den MCP-Server durch das Entfernen versteckter oder unsichtbarer Inhalte vor üblichen Prompt-Injection-Angriffen zu schützen.
- Eine neue Kommandozeilenoption namens
--ai-targetedwurde hinzugefügt, um die Ausgabe der Web-Scraping-Befehle für KI aufzubereiten und wie beim MCP-Server vor üblichen Prompt-Injection-Angriffen zu schützen. - Eine neue Option für Browser-Sitzungen namens
executable_pathwurde hinzugefügt, um einen eigenen Browser-Pfad anzugeben (löst #202) - Der Code des MCP-Servers wurde umstrukturiert, um die Wartung zu vereinfachen. Alle Werkzeuge arbeiten jetzt asynchron.
- Der Code der CLI-Befehle wurde umstrukturiert, um die Wartung zu vereinfachen und ihn um 210 Zeilen zu kürzen.
🐛 Fehlerbehebungen¶
- Korrektur zur Beibehaltung der HTTP-Methode bei erneuten Versuchen in einer Spider-Sitzung, von @karesansui-u in #201
- Eine Höchstzahl für erneute Versuche zum Abrufen des Seiteninhalts wurde hinzugefügt, um Endlosschleifen zu vermeiden, von @haosenwang1018 und @D4Vinci in #197
- Ein alleinstehendes
raisewurde durchreturn Falsein_restore_from_checkpointersetzt, von @haosenwang1018 in #196 get_allwurde durchgetallinTexthandlerersetzt, um zur Klasse Selector zu passen.
Verbesserungen der Tests und Testabdeckung¶
- Tests für Randfälle von
_normalize_credentialswurden hinzugefügt, von @Bortlesboat in #192 - Tests für das Speichern und anschließende Abrufen sowie für die grundlegende Speicherung wurden hinzugefügt, von @haosenwang1018 in #193
- Testabdeckung für die Regex-Pfade von
TextHandlerundTextHandlers.re()wurde hinzugefügt, von @haosenwang1018 in #194 - Tests für Randfälle von
filter,iterancestorsundfind_similarwurden hinzugefügt, von @awanawana in #200
Verbesserungen am Agent Skill¶
- Defekte Markdown-Links in den Skill-Referenzen wurden korrigiert, von @yetval in #204
- Die Struktur des Skills wurde verbessert, damit sie die Prüfung von Clawhub besser erfüllt.
- Der Skill muss jetzt beim Scraping über die Kommandozeile die Option
--ai-targetedverwenden.
Verbesserungen der Dokumentation¶
- Eine koreanische README-Übersetzung wurde hinzugefügt, von @greatsk55 in #187
- Abstände zwischen CJK- und lateinischen Zeichen in den chinesischen und japanischen READMEs wurden korrigiert.
- Defekte Links aus dem alten Website-Design wurden korrigiert.
v0.4.2 - 2026-03-08¶
Ein neues Wartungsupdate mit wichtigen Änderungen
Fehlerbehebungen¶
- Die Funktion
get_all_text()erfasst jetzt auch Textknoten, die auf Elemente folgen. Dadurch können der MCP-Server und die Befehle Text lesen, der zuvor fehlte (#168). Danke @mhillebrand - Referer gibt jetzt die einfache Google-URL statt einer Google-Such-URL zurück. Die bisherige Logik war falsch und konnte ein Merkmal zur Erkennung des Browser-Fingerabdrucks erzeugen (#179). Danke @Bortlesboat
- Ein Problem beim Zusammenfügen zusätzlicher Startoptionen wurde in allen Browsern behoben. Danke @rostchri
- Ein Problem mit Typannotationen wurde behoben, das bei Python-Versionen vor 3.12 zu Abstürzen führte. (Behebt #163)
Sonstige Änderungen¶
- Ein Agent Skill für Claude Code / OpenClaw und andere Werkzeuge für KI-Agenten wurde hinzugefügt.
- Der Agent Skill wurde zu Clawhub hinzugefügt.
- Alle Browser und Playwright wurden auf die neuesten Versionen aktualisiert.
- Eine französische Übersetzung der Haupt-README wurde hinzugefügt.
v0.4.1 - 2026-02-27¶
Ein neues Update mit vielen wichtigen Änderungen
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Genauere reguläre Ausdrücke zur Erkennung von Cloudflare-Challenges (Danke an @Rinz27 #133)
- Schnellere und effizientere Lösung von Cloudflare-Challenges. Sie ist jetzt fast doppelt so schnell.
- Verbesserte Lösung von Cloudflare-Challenges für Websites, die manchmal zweimal die Cloudflare-Seite anzeigen, bevor sie zur eigentlichen Website weiterleiten.
- Bessere Tarnung und höhere Geschwindigkeit des getarnten Browsers durch das Entfernen der injizierten JS-Dateien.
- Verbessertes MCP-Schema, das von OpenCode akzeptiert wird (Danke an @robin-ede #137)
- Noch bessere Übereinstimmung des MCP-Schemas mit dem Protokoll, damit VS Code Copilot und andere streng prüfende Werkzeuge es akzeptieren. (Behebt #150 )
- Deutlich geringerer Token-Verbrauch des MCP-Servers, weil unnötige HTML-Tags bei aktivierter Option
main_content_onlyentfernt werden. - Die PyPI-Seite wurde korrigiert. Dateien zur Registrierung des MCP-Servers im MCP-Serververzeichnis wurden hinzugefügt.
- Ein neues Codebeispiel zeigt, wie Sie die Browser-Abhängigkeiten per Code statt über die Kommandozeile installieren, um die Automatisierung zu erleichtern.
- Alle Workflows wurden durch die Verwendung der neuesten Action-Versionen verbessert (Danke an @salmanmkc #143/#144)
v0.4 - 2026-02-15¶
Die bisher größte Scrapling-Version: Spider-Framework, Proxy-Rotation und große Verbesserungen am Parser
Diese Version bringt ein vollständig asynchrones Spider- und Crawling-Framework, intelligente Proxy-Verwaltung und wichtige API-Änderungen, die Scrapling leistungsfähiger und einheitlicher machen. Lesen Sie vor dem Update den Abschnitt zu inkompatiblen Änderungen sorgfältig durch.
🕷️ Spider-Framework¶
Ein neues asynchrones Crawling-Framework auf Basis von anyio für strukturiertes Scraping in großem Umfang:
from scrapling.spiders import Spider, Response
class MySpider(Spider):
name = "demo"
start_urls = ["https://example.com/"]
async def parse(self, response: Response):
for item in response.css('.product'):
yield {"title": item.css('h2::text').get()}
MySpider().start()
- Spider-API ähnlich wie in Scrapy: Definieren Sie Spider mit
start_urls, asynchronenparse-Callbacks,Request/Response-Objekten und einer Prioritätswarteschlange. - Gleichzeitiges Crawling: Einstellbare Grenzen für gleichzeitige Anfragen, Drosselung je Domain und Wartezeiten zwischen Downloads.
- Unterstützung mehrerer Sitzungen: Einheitliche Schnittstelle für HTTP-Anfragen und getarnte Browser ohne sichtbares Fenster in einem Spider. Leiten Sie Anfragen anhand der ID an verschiedene Sitzungen weiter. Sitzungen lassen sich bei Bedarf starten.
- Pausieren und Fortsetzen: Der Zustand des Crawls wird mit Checkpoints gespeichert. Drücken Sie Ctrl+C für ein geordnetes Beenden und starten Sie dann erneut, um an derselben Stelle fortzufahren.
- Streaming-Modus: Empfangen Sie extrahierte Einträge sofort über
async for item in spider.stream(), mit Statistiken in Echtzeit. Ideal für Benutzeroberflächen, Pipelines und lange Crawls. - Erkennung blockierter Anfragen: Blockierte Anfragen werden automatisch erkannt und wiederholt. Die Logik ist anpassbar.
- Integrierter Export: Exportieren Sie Ergebnisse über Hooks und Ihre eigene Pipeline oder nutzen Sie den integrierten JSON/JSONL-Export mit
result.items.to_json()bzw.result.items.to_jsonl(). - Hooks für den Lebenszyklus:
on_start(),on_close(),on_error(),on_scraped_item()und weitere Hooks bieten volle Kontrolle über den Ablauf des Crawls. - Detaillierte Crawl-Statistiken: Verfolgen Sie Anfragen, Antworten, Bytes, Statuscodes, Proxys, Details je Domain und Sitzung, die Anzahl der Logmeldungen je Stufe und mehr.
- uvloop-Unterstützung: Übergeben Sie
use_uvloop=Trueanspider.start(), um die asynchrone Ausführung zu beschleunigen, wenn uvloop verfügbar ist.
Ein neuer Abschnitt auf der Website enthält alle Details. Klicken Sie hier
🔄 Proxy-Rotation¶
- Neue Klasse
ProxyRotatormit threadsicherer Rotation. Sie funktioniert mit allen Fetchern und Sitzungen:
from scrapling import ProxyRotator
rotator = ProxyRotator(["http://proxy1:8080", "http://proxy2:8080"])
Fetcher.get(url, proxy_rotator=rotator)
- Eigene Rotationsstrategien: Erstellen Sie Ihre eigene Logik zur Proxy-Rotation
- Proxy je Anfrage ersetzen: Übergeben Sie
proxy=an einen einzelnen Aufruf vonget()/post()/fetch(), um für diese Anfrage einen anderen Proxy als den der Sitzung zu verwenden.
🌐 Verbesserungen an Browser-Fetchern¶
- Domains blockieren: Neuer Parameter
blocked_domainsinDynamicFetcher/StealthyFetcher, um Anfragen an bestimmte Domains zu blockieren. Subdomains werden automatisch einbezogen. - Automatische Wiederholungen: Browser-Fetcher wiederholen fehlgeschlagene Anfragen jetzt mit den Parametern
retries(Standard: 3) undretry_delay(Standard: 1s). Dazu gehört die Erkennung von Proxy-Fehlern. - Antwortmetadaten: Das Dictionary
Response.metaspeichert automatisch den verwendeten Proxy und übernimmt die Metadaten der Anfrage. - Response.follow(): Erstellen Sie
Request-Objekte für Folgeanfragen mit automatischer Referer-Verwaltung. Diese Funktion ist für das Spider-System vorgesehen. - Keine automatische Wiedergabe: Browser-Sitzungen blockieren jetzt automatisch abgespielte Inhalte, die zuvor Probleme verursacht haben.
- Geschwindigkeit: Bessere Tarnung und höhere Geschwindigkeit durch angepasste Browser-Startoptionen.
🔧 Fehlerbehebungen und Verbesserungen¶
- Parser-Optimierung: Der Parser wurde für wiederholte Vorgänge optimiert, um die Leistung zu verbessern.
- Fehlerhafte Seiten: Ein Fehler wurde behoben, durch den der Browser bei Seitenfehlern nicht geschlossen wurde.
- Leerer Inhalt: Antworten mit leerem Body werden verarbeitet.
- Playwright-Schleife: Ein Problem wurde behoben, bei dem die Playwright-Schleife nach einer fehlgeschlagenen CDP-Verbindung offen blieb
- Typsicherheit: Alle mypy-Fehler wurden behoben. Typannotationen wurden in bisher untypisierten Funktionskörpern ergänzt. mypy und pyright wurden zum CI-Workflow hinzugefügt.
⚠️ Inkompatible Änderungen¶
css_first/xpath_firstentfernt: Verwenden Sie stattdessencss('.selector').first,css('.selector')[0]odercss('.selector').get().- Alle Auswahlmethoden geben jetzt
Selectorszurück:css('::text'),xpath('//text()'),css('::attr(href)')undxpath('//@href')geben jetztSelectorszurück, wobei Textknoten inSelector-Objekte mittag="#text"eingebettet werden. Zuvor wurdeTextHandlerszurückgegeben. Das vereinheitlicht die API über alle Auswahlmethoden und Typannotationen hinweg. Response.bodyist immerbytes: Zuvor konnte der Wertstroderbytessein. Jetzt wird immerbyteszurückgegeben.- Verhalten von
get()/getall(): BeiSelectorgibtget()einTextHandler-Objekt zurück, also serialisiertes HTML oder einen Textwert.getall()gibtTextHandlerszurück. Aliase:extract_first = get,extract = getall. Das alteget_all()vonSelectorswurde entfernt. Selectors.first/.last: Sicherer Zugriff, derSelector | Nonezurückgibt, stattIndexErrorauszulösen.- Interne Konstanten umbenannt:
DEFAULT_FLAGS→DEFAULT_ARGS,DEFAULT_STEALTH_FLAGS→STEALTH_ARGS,HARMFUL_DEFAULT_ARGS→HARMFUL_ARGS,DEFAULT_DISABLED_RESOURCES→EXTRA_RESOURCES.
🔨 Sonstige Änderungen¶
- Geänderte Abhängigkeiten:
tldextractwurde durchtldersetzt. Die interne Datei_html_utils.pywurde zugunsten vonw3lib.html.replace_entitiesentfernt.typing_extensionsist jetzt zwingend erforderlich. - Überarbeitete Dokumentation: Vollständiger Wechsel von MkDocs zu Zensical, ein neuer Abschnitt zur Spider-Dokumentation, aktualisierte bestehende Seiten und neue API-Referenzen.
v0.3.14 - 2026-01-03¶
Ein kleines Wartungsupdate für Probleme, die mit v0.3.13 auf einigen Geräten aufgetreten sind
- Der Inkognitomodus wurde in
StealthyFetcherund seinen Sitzungsklassen deaktiviert, weil Cookies unter Windows dadurch nicht über mehrere Seiten hinweg erhalten blieben. Unter MacOS und Linux trat das nicht auf (Behebt #123; danke an @frugality4121 für den Hinweis und an @gembleman für die Lösung). - Die neueste browserforge-Version wurde fest vorgegeben, um Probleme mit alten Header-Modellen bei Benutzern zu lösen, die bereits eine alte browserforge-Version installiert hatten.
v0.3.13 - 2026-01-01¶
Ein großes Update mit vielen Verbesserungen in vielen Bereichen, aber auch mit zahlreichen begründeten inkompatiblen Änderungen. Lesen Sie die folgenden Hinweise vor dem Update
-
Aus mehreren Gründen verwenden wir Camoufox ab jetzt nicht mehr. Falls die Entwicklung fortgesetzt wird, könnten wir in Zukunft darauf zurückkommen. Wenn Sie Camoufox wie vor dieser Version weiterverwenden möchten, finden Sie in diesem Abschnitt eine Anleitung.
-
Bisher haben wir patchright im Tarnmodus von
DynamicFetcherund seinen Sitzungsklassen verwendet. Dieser Modus wurde dort entfernt. Stattdessen verwenden wir patchright jetzt inStealthyFetcherund seinen Sitzungsklassen, mit SEHR VIELEN Verbesserungen, wie Sie sehen werden. Sie verbessern die Tarnung zusätzlich zu den Funktionen von patchright.
Dadurch sind StealthyFetcher und seine Sitzungsklassen 101 % schneller, benötigen weniger Arbeitsspeicher und Speicherplatz und haben etwa ~400 Codezeilen weniger. Vor allem sind sie stabiler als bei der früheren Verwendung von Camoufox.
Das verkürzt auch die Installation mit scrapling install, verkleinert das Docker-Image, verbessert den Ablauf der Tests in der GitHub-CI und macht scrapling für neue Benutzer verständlicher.
Inkompatible Änderungen¶
- Das Argument
stealthwurde ausDynamicFetcherund seiner Sitzungsklasse entfernt.hide_canvaswurde nachStealthyFetcherund in dessen Sitzungsklassen verschoben. - Das Argument
disable_webglwurde vonDynamicFetcherin die KlasseStealthyFetcherverschoben und inallow_webglumbenannt. Das gilt auch für alle Sitzungsklassen. - Die Klasse
StealthyFetcherist jetzt im Wesentlichen die neue getarnte Version vonDynamicFetcher. Daher wurden diese Argumente entfernt:block_images,humanize,addons,os_randomize,disable_adsundgeoip. Ich habe versucht, sie in Chromium nachzubilden, aber jedes davon hatte ein eigenes Problem. Das könnte sich in kommenden Versionen vor v0.4 ändern.
Nun zu den guten Nachrichten: Wir haben vieles verbessert und behoben :)
Verbesserungen¶
- Sie wissen bereits, dass
StealthyFetcherund seine Sitzungsklassen jetzt 101 % schneller sind. AuchDynamicFetcherund seine Sitzungsklasse sind jetzt 20 % schneller. - Der Algorithmus zum Lösen von Cloudflare-Challenges wurde verbessert, um schneller fertig zu werden und mehr Fälle abzudecken. Dank der überarbeiteten Struktur können Sie außerdem eine doppelt so schnelle Captcha-Lösung erwarten!
- Alle Fetcher benötigen jetzt weniger Arbeitsspeicher.
- Der MCP-Server verbraucht weniger Tokens und spart dadurch mehr Geld!
- Das Docker-Image ist jetzt 60 % kleiner.
- Die gesamte Dokumentationswebsite wurde um die neuen Funktionen ergänzt. Gleichzeitig wurden Erklärungen verständlicher, viele Abschnitte kürzer und weitere Beispiele sowie fehlende Argumente ergänzt. Die API-Referenz erhielt Diagramme, dazu kamen viele weitere Verbesserungen. Die Website lädt jetzt 130 % schneller, verbraucht weniger Daten und ist besser für SEO geeignet.
Fehlerbehebungen¶
- Fehlende Argumente wurden in den Kurzbefehlen der Web-Scraping-Shell ergänzt. Die Kurzbefehle wurden außerdem genauer gemacht.
- Ein Problem wurde behoben, bei dem
google_searchauch für localhost- oder IP-URLs einen Google-Referer erzeugte.
v0.3.12 - 2025-12-18¶
Was sich geändert hat¶
- Die Klassen
DynamicSession/AsyncDynamicSessionhaben ein neues Argument namenstimezone_id. Damit können Sie die Zeitzone des Browsers an die des verwendeten Proxys oder VPNs anpassen. Websites können den Proxy dann nicht anhand unterschiedlicher Zeitzonen erkennen. - Die automatische Umwandlung von Antworten in JSON wurde verbessert.
- Die interne Funktion
__create__wurde in den Sitzungsklassen der Fetcher instartumbenannt, um die Verwendung außerhalb deswith-Kontexts zu erleichtern. curl_cffiund weitere Abhängigkeiten wurden auf die neuesten Versionen aktualisiert.
v0.3.11 - 2025-12-03¶
Was sich geändert hat¶
- Die Behandlung von Zeitüberschreitungen wurde verbessert, wenn
network_idleauf instabilen Websites verwendet wird, etwa auf Seiten mit laufender Medienwiedergabe. - Die Autovervollständigung für den Kurzbefehl
stealthy_fetchin der Web-Scraping-Shell wurde korrigiert
v0.3.10 - 2025-11-26¶
Ein Wartungsupdate mit vielen wichtigen und möglicherweise inkompatiblen Änderungen
- Alle Kodierungsprobleme behoben durch einen besseren Ansatz, der Webseiten mit falsch deklarierter Kodierung verarbeitet (Danke an @Kemsty2 für den Einsatz und die Hinweise in #110 #111 )
- Ein Logikproblem behoben, das seit v0.3 beim Überschreiben von Sitzungsparametern durch Anfrageparameter in allen Browser-Fetchern bestand
- Die Signaturen der Kurzbefehle korrigiert in der interaktiven Web-Scraping-Shell. Dadurch funktioniert ihre Autovervollständigung vollständig. Auch dieses Problem bestand seit v0.3.
- Die Maxmind-Datenbank aktualisiert, was das Argument
geoipvonStealthyFetcherund seinen Sitzungsklassen verbessert. - Alle verwendeten Browser aktualisiert auf die neuesten verfügbaren Versionen.
- INKOMPATIBLE ÄNDERUNGEN: Alle Fetcher wurden umfassend überarbeitet. Daraus ergeben sich einige interessante Änderungen, die Ihren Code beeinträchtigen könnten:
- Der Code von Scrapling ist jetzt etwa ~750 Zeilen kürzer. Viele Änderungen erleichtern die künftige Wartung und verringern den Ressourcenverbrauch etwas.
- Die Validierung aller Fetcher und ihrer Sitzungsklassen ist deutlich schneller, was auch ihre Gesamtgeschwindigkeit verbessert.
- Dafür akzeptieren die Fetcher keine Positionsargumente außer
urlmehr. Alle übrigen Argumente müssen mit ihrem Namen übergeben werden. Verwenden Sie alsoFetcher.get('https://google.com', stealthy_headers=True)stattFetcher.get('https://google.com', True), falls Sie das aus irgendeinem Grund bisher so gemacht haben! - Seit v0.3 gab es einen störenden Unterschied zwischen Browser-Fetchern und ihren Sitzungsklassen: Das Argument für Parser-Einstellungen je Anfrage hieß
custom_config, in den Sitzungsklassen dagegenselector_config. Durch die Überarbeitung konnten wir den Namen zuselector_configvereinheitlichen, ohne Ihren Code zu beschädigen. Der Hauptname ist jetztselector_config, das alte Argumentcustom_configbleibt aus Kompatibilitätsgründen unterstützt. Autovervollständigung gibt es nur fürselector_config. - Dafür mussten auch die Typannotationen der Fetcher-Funktionen dynamisch erzeugt werden. Falls die Autovervollständigung in Ihrer IDE nicht richtig funktioniert, stellen Sie sicher, dass Sie eine aktuelle Version verwenden. Wir haben fast alle bekannten IDEs und Editoren getestet.
Wir haben auch alle Benchmark-Tabellen mit den aktuellen Zahlen im Vergleich zu den neuesten Versionen aller alternativen Bibliotheken aktualisiert.
v0.3.9 - 2025-11-17¶
Ein neues Update mit vielen wichtigen Änderungen
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Das Argument
impersonateinFetcherundFetcherSessionakzeptiert jetzt eine Browser-Liste. Die Bibliothek wählt daraus bei jeder Anfrage zufällig einen Browser aus.
from scrapling.fetchers import FetcherSession
with FetcherSession(impersonate=['chrome', 'firefox', 'safari']) as s:
s.get('https://github.com/D4Vinci/Scrapling')
- Ein neues Argument der Methode
cleaninTextHandlerentfernt HTML-Entitäten einfach aus dem aktuellen Text. - Große Verbesserungen an der Dokumentation mit genaueren Erklärungen vieler Bereiche und automatischen Übersetzungen der Hauptdatei
README.md.
🐛 Fehlerbehebungen¶
- Ein großes Problem beim Abrufen von Antworten mit Browser-Fetchern wurde behoben. Eine intelligente Erkennung des Inhaltstyps stellt jetzt sicher, dass
response.bodynur bei HTML den vom Browser gerenderten Inhalt enthält. Andernfalls enthält es den Rohinhalt der letzten Anfrage. So können Sie Binär- und Textdateien herunterladen, ohne dass sie in HTML-Tags verpackt werden. Gleichzeitig können Sie weiterhin den gerenderten Inhalt einer Website abrufen, wenn Sie ihn benötigen.
🔨 Sonstige Änderungen¶
- Der Leitfaden für Beiträge wurde verständlicher und einfacher gestaltet.
- Ein neuer Workflow erzwingt die Verwendung der Werkzeuge zur Codequalität. Es sind dieselben wie bei den Pre-commit-Hooks.
v0.3.8 - 2025-10-27¶
Ein neues Update mit vielen wichtigen Änderungen
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Bei allen Browser-Fetchern führen Websites, deren Anfragen nie fertig laden, mit
network_idlenicht mehr zum Absturz des Codes. - Die Logik zum Sammeln und Prüfen von Seiteninhalten in Browser-Fetchern wurde geändert, damit Browser unter Windows so stabil wie unter Linux/MacOS laufen. Dieser Verhaltensunterschied liegt an der anderen Implementierung von Playwright unter Windows.
- Die gesamte Validierungslogik wurde überarbeitet, wodurch Anfragen aller Browser-Fetcher 8-15 % schneller sind
- Die neue Option
extra_flagsinDynamicFetcherund seiner Sitzung erlaubt zusätzliche eigene Chrome-Startoptionen neben den bestehenden Optionen. - Beim Einsatz von
page_actionwird wieder die alte Routing-Logik zur Erfassung von Antworten verwendet, die in der letzten Version geändert worden war. So lässt sich der neueste Seiteninhalt erfassen, wennpage_actionihn ohne neue Anfrage verändert. (Danke an @gembleman für den Hinweis in #100 und #102 )
🐛 Fehlerbehebungen¶
- Ein Tippfehler in
load_domin der Methode async_fetch von DynamicSession wurde korrigiert - Ein Problem beim Lösen von Cloudflare-Challenges wurde behoben: Bei eingebetteten Captchas, die nach dem Lösen sichtbar bleiben, wurde endlos auf ihr Verschwinden gewartet. Nach 30 Sekunden wird nun angenommen, dass es sich um diesen Captcha-Typ handelt (Behebt #100 )
🔨 Sonstige Änderungen¶
- Das Docker-Image wird jetzt zur einfacheren Nutzung automatisch auf Dockerhub und in der Container-Registry von GitHub veröffentlicht.
- Eine neue Dokumentationsseite zeigt, wie Sie den Scrapeless-Browser mit Scrapling verwenden.
v0.3.7 - 2025-10-12¶
Ein neues Update mit vielen wichtigen Änderungen
🚀 Neuerungen und Verbesserungen der Bedienung¶
- Das Argument
solve_cloudflareinStealthyFetcherwurde überarbeitet, um alle Arten eigener Turnstile-Implementierungen lösen zu können. - Der gesamte Code wurde überarbeitet, um die Prüfungen von Pyright zu bestehen. Das verbessert die Arbeit in allen IDEs und behebt viele Fehler.
- Die Anfragelogik wurde übersichtlicher und schneller gestaltet (Behebt auch #97 )
- Die neue Option
user_data_dirin allen Browser-Sitzungsklassen ermöglicht es, Browserdaten aus früheren Sitzungen wiederzuverwenden, etwa Cookies und gespeicherte Daten. Ohne diese Option verwendet Playwright bei jedem Start wie bisher ein zufälliges Verzeichnis. - Die neue Anpassungsoption
additional_argsinDynamic fetcherund seiner Sitzungsklasse erlaubt zusätzliche Argumente für den Playwright-Kontext. Das war zuvor bereits mitStealthyFetchermöglich. - Die Routing-Logik zur Erfassung der letzten Navigationsantwort wurde für alle Browser verbessert. Rohe Antworten können jetzt an den Parser gehen, bevor der Browser sie verarbeitet, statt wie bisher zuerst im Browser verarbeitet zu werden. Das ist besonders für Text- und JSON-Antworten hilfreich.
🐛 Fehlerbehebungen¶
- Die überarbeitete Routing-Logik behebt ein Problem beim Abrufen instabiler Websites auf einigen Windows-Geräten.
- Die Überarbeitungen dieser Version beheben viele zuvor schwer erkennbare Fehler sowie ungewöhnliche Probleme mit der Autovervollständigung in einigen IDEs.
- Viele Korrekturen an der Dokumentationswebsite
v0.3.6 - 2025-10-01¶
🚀 Neuerungen¶
- Das Argument
solve_cloudflareinStealthyFetcherund seinen Sitzungsklassen wurde verbessert, um alle Arten von Turnstile- und Cloudflare-Zwischenseiten-Challenges zu lösen 🎉 - Der MCP-Server kann jetzt
Streamable HTTPverwenden, damit Sie ihn einfach über das Netzwerk bereitstellen können. - Docker-Unterstützung wurde hinzugefügt. Bei jeder Veröffentlichung wird automatisch ein Image mit allen Browsern erstellt und auf Docker Hub veröffentlicht
🐛 Fehlerbehebungen¶
- Ein Kodierungsproblem im Parser wurde behoben, das in einigen Fällen auftrat: der bekannte Fehler
invalid start byte - Mehrere Teile der Bibliothek wurden umstrukturiert, um Speicherlecks zu beheben. Je nach Konfiguration wird jetzt deutlich weniger Speicher benötigt (Behebt auch #92 )
- Typannotationen wurden in vielen Teilen des Codes verbessert, um die Arbeit in der IDE zu erleichtern (Behebt auch #93 )
v0.3.5 - 2025-09-20¶
Eine notwendige Version, die mehrere Probleme behebt
🚀 Neuerungen¶
-
Alle Browser-Fetcher (
DynamicFetcher/StealthyFetcher/...) und ihre Sitzungsklassen rufen Websites jetzt 15-20 % schneller ab:- Die Seitenverwaltung ist dank der verbesserten Logik von @AbdullahY36 in #87 deutlich schneller
- Die allgemeine Validierungslogik und die Erstellung von Seiten für synchrone Abrufe wurden optimiert. Zusammen bringen diese Änderungen große Geschwindigkeitsgewinne
-
Große Verbesserungen am Tarnmodus von
DynamicFetcherund seinen Sitzungsklassen durch den Ersatz vonrebrowser-playwrightdurchPatchRight:- Vor diesem Update wurde
rebrowser-playwrightdeaktiviert, wenn Siestealthundreal_chromeaktivierten, weil beide nicht gut zusammenarbeiteten. MitPatchRightbesteht dieses Problem nicht mehr - Sie können jetzt mit geschlossenen Shadow Roots interagieren, da
PatchRightautomatisch mit ihnen umgehen kann.
- Vor diesem Update wurde
🐛 Fehlerbehebungen¶
- Ein Fehler bei der Verwendung der Methode
reaus der KlasseSelectorswurde behoben. - Ein Fehler in den Befehlen
uncurlundcurl2fetcherder Web-Scraping-Shell wurde behoben, durch den die curl-Option--data-rawfalsch verarbeitet wurde. - Ein Fehler im Befehl
viewder Web-Scraping-Shell wurde behoben, dessen Auftreten von der Kodierung der Website abhing. - Ein Fehler bei der Inhaltskonvertierung wurde behoben, der den Modus
mcpund die Befehleextractbetraf.
Neue Mitwirkende¶
- @AbdullahY36 hat mit #87 erstmals beigetragen
v0.3.4 - 2025-09-16¶
Eine notwendige Version, die mehrere Probleme behebt
🚀 Neuerungen¶
- Alle Sitzungsklassen der Fetcher wurden zur interaktiven Shell hinzugefügt und sind dort ohne Import sofort verfügbar.
🐛 Fehlerbehebungen¶
- Eine Umgehung für einen Fehler in der Playwright-API unter Windows wurde hinzugefügt, der beim Abrufen von Inhalten während der Lösung von Cloudflare-Challenges auftrat.
- Ein Kodierungsproblem im Befehl
viewder interaktiven Shell wurde behoben - Ein Fehler im Argument
max_pagesvonAsyncStealthySessionwurde behoben, der den Code abstürzen ließ. - Ein Problem der letzten Updates wurde behoben, bei dem die Eigenschaften
html_contentundprettifyvonSelectorabhängig von der Kodierung Bytes zurückgaben. Beide geben wieder Strings zurück.
v0.3.3 - 2025-09-15¶
- Die Logik zum Schließen des Standardtabs in Browser-Fetchern wurde entfernt, da sie einen Absturz auslöste. Das trat nicht auf dem Mac auf und konnte nur unter Windows und Linux reproduziert werden
v0.3.2 - 2025-09-15¶
Versionshinweise für v0.3.2
🚀 Neuerungen¶
- Optionale Fetcher-Abhängigkeiten: Alle Fetcher gehören jetzt zu optionalen Abhängigkeitsgruppen. Das verkleinert das Basispaket. Das Basismodul
scraplingenthält nur noch den Parser. Für Fetcher oder Kommandozeilenoptionen führen Siepip install "scrapling[fetchers]"aus. Die ausführliche Installationsanleitung finden Sie hier -
Konfiguration je Seite in Sitzungen: Die Sitzungsklassen der Browser-Fetcher erlauben jetzt getrennte Einstellungen für jede Seite. Alle Parameter für einzelne Abrufe werden wie Sitzungsparameter validiert. Weitere Details stehen hier auf der Dokumentationswebsite
Beispiel: -
Verbesserte Browser-Fetcher
-
Eine neue Option steuert, ob auf das Ende der JavaScript-Ausführung auf einer Seite gewartet wird. Sie ist wie bisher standardmäßig aktiviert
-
Der Tarnmodus in
DynamicFetcherund seinen Sitzungsklassen ist jetzt zuverlässiger. DynamicFetcherundStealthyFetcherbenötigen weniger Ressourcen, indem sie den von persistenten Playwright-Kontexten geöffneten Standardtab automatisch finden und schließen- Ein wichtiger Logikfehler bei der Seitenrotation der Browser-Fetcher wurde behoben. Vorherige Seiten werden jetzt durch neue ersetzt, weil wiederverwendete Tabs noch durch frühere Einstellungen beeinflusst sein konnten
StealthyFetcherund seine Sitzungsklassen sind jetzt etwas schneller (5 %)
-
-
Verbesserte Eigenschaft
.body: Sie gibt den übergebenen Inhalt jetzt unverändert und ohne Verarbeitung zurück. Das ermöglicht Dateidownloads und Anfragen ohne HTML-Antwort. Hier ist ein Beispiel für den Download eines Bildes:
🐛 Fehlerbehebungen¶
- Kodierungsprobleme behoben: Mehrere Kodierungsprobleme mit einigen Websites im Parser, im Modus mcp und in den extract-Befehlen wurden behoben (Behebt auch #80 und #81)
- Schnelleres Parsen: Viele Änderungen in verschiedenen Bereichen machen die Bibliothek schneller. Das zeigen auch die aktualisierten Benchmarks
🔨 Sonstige Änderungen¶
- Aktualisierte Benchmarks: Die Leistungsmessungen wurden aktualisiert, um die aktuellen Geschwindigkeitsgewinne mit den neuesten Versionen ähnlicher Bibliotheken zu vergleichen
- Viel Code überarbeitet und ungenutzten Code durch bessere Implementierungen ersetzt: Weniger und übersichtlicherer Code, einfachere Wartung
- YouTube-Video hinzugefügt: Die MCP-Dokumentation wurde um Videoinhalte ergänzt.
- Neue Issue-Vorlage: Eine einfache Vorlage für Benutzer, die die bestehenden Vorlagen nicht nutzen können.
- CI-Workflow optimiert: Der Test-Workflow überspringt jetzt Ausführungen, wenn nur die Dokumentation oder andere Dateien ohne Code geändert wurden.
- Abhängigkeiten aktualisiert: Verschiedene Abhängigkeiten wurden auf die neuesten Versionen aktualisiert.
- Codestil verbessert: Neue ruff-Regeln wurden auf alle Dateien angewendet.
- Pre-commit-Hooks: Die Pre-commit-Konfiguration wurde aktualisiert.
🎯 Inkompatible Änderungen¶
- Der Parameter
max_pageswurde aus der synchronen Version vonStealthySessionentfernt, um das Verhalten anDynamicSessionanzugleichen. In der synchronen Version ist er nicht sinnvoll
v0.3.1 - 2025-09-02¶
- Ein Problem bei der Installation von scrapling ohne das Extra
shellwurde behoben (#76 ) - Alle Browser-Fetcher und ihre Sitzungsklassen haben ein neues Argument für eine JS-Datei, die beim Erstellen der Seite ausgeführt wird (#56) :
from scrapling.fetchers import StealthyFetcher
StealthyFetcher.fetch('https://example.com', init_script="/absolute/path/to/js/script.js")
v0.3 - 2025-09-01¶
🎉 Große Version - Vollständige Überarbeitung der Architektur
Scrapling v0.3 ist das bisher größte Update des Projekts. Die Architektur wurde komplett neu geschrieben, die Leistung deutlich verbessert und viele neue Funktionen ergänzt, darunter die KI-Integration und eine interaktive Shell für Web-Scraping.
Diese Version enthält mehrere inkompatible Änderungen. Bitte lesen Sie die Versionshinweise sorgfältig.
🚀 Wichtige neue Funktionen¶
Architektur auf Basis von Sitzungen¶
- Neue Sitzungsklassen: Vollständig neu geschrieben, mit Unterstützung für dauerhafte Sitzungen
FetcherSession- HTTP-Anfragen mit dauerhaftem Zustand, sowohl für synchronen als auch für asynchronen CodeDynamicSession/AsyncDynamicSession- Browser-Automatisierung, bei der der Browser offen bleibt, bis Sie fertig sindStealthySession/AsyncStealthySession- Browser-Nutzung im Stealth-Modus, bei der der Browser offen bleibt, bis Sie fertig sind
- Asynchrone Verwaltung von Browser-Tabs: Das neue Argument
max_pagesstellt einen Pool von Tabs bereit, die für gleichzeitige Browser-Abrufe abwechselnd genutzt werden - Gleichzeitige Sitzungen: Führen Sie mehrere voneinander getrennte Sitzungen gleichzeitig aus
Weitere Informationen finden Sie im Abschnitt Fetching auf der Website.
Viele neue Funktionen zur Tarnung und gegen Bot-Erkennung¶
- 🤖 Cloudflare-Prüfungen lösen: Automatisches Lösen von Cloudflare-Turnstile-Prüfungen in
StealthyFetcherund seinen Sitzungsklassen - Browser-Fingerprints nachbilden: Die vollständig neue Klasse Fetcher bildet TLS-Fingerprints echter Browser nach, erzeugt zur Browserversion passende Header und unterstützt HTTP/3 und mehr
- Verbesserter Stealth-Modus: Der Stealth-Modus von
DynamicFetcherund seinen Sitzungsklassen ist jetzt robuster und zuverlässiger (auch alsPlayWrightFetcherbekannt)
KI-Integration und MCP-Server¶
- Integrierter MCP-Server: Ein Server für das Model Context Protocol für KI-gestütztes Web-Scraping
- 6 leistungsfähige Werkzeuge:
get,bulk_get,fetch,bulk_fetch,stealthy_fetch,bulk_stealthy_fetch - Intelligente Inhaltsextraktion: Wandeln Sie Webseiten oder Elemente in Markdown oder HTML um, oder extrahieren Sie eine bereinigte Fassung des Textinhalts
- Unterstützung für CSS-Selektoren: Wählen Sie mit der Scrapling-Engine gezielt einzelne Elemente aus, bevor Sie den Inhalt an die KI übergeben
- Bot-Schutz umgehen: Bewältigen Sie Cloudflare Turnstile und andere Schutzmaßnahmen
- Proxy-Unterstützung: Nutzen Sie Proxys für Anonymität und Anfragen aus bestimmten Regionen
- Browser nachbilden: Bilden Sie echte Browser mit TLS-Fingerprints, echten Headern passend zur Browserversion und mehr nach
- Parallele Verarbeitung: Lesen Sie mehrere URLs gleichzeitig aus, um effizienter zu arbeiten
- und mehr...
Neue interaktive Shell für Web-Scraping¶
- Eine neue Shell: Eine angepasste IPython-Shell mit vielen praktischen integrierten Kurzbefehlen wie
get,post,put,delete,fetchundstealthy_fetch - Intelligente Seitenverwaltung: Die neuen Befehle
pageundpagesspeichern automatisch die aktuelle Seite und den Verlauf aller Anfragen aus der Shell - Curl-Integration: Wandeln Sie curl-Befehle aus den DevTools des Browsers mit den Funktionen
uncurlundcurl2fetcherinFetcher-Anfragen um - und mehr...
Websites im Terminal auslesen, ohne zu programmieren¶
- Neue Extract-Befehle: Web-Scraping im Terminal ohne Programmierung
scrapling extract get/post/put/delete- Einfache HTTP-Anfragenscrapling extract fetch- Dynamische Inhalte auslesenscrapling extract stealthy-fetch- Bot-Schutz umgehen
- Lädt Webseiten herunter und speichert ihren Inhalt in Dateien.
- Wandelt HTML in lesbare Formate um, etwa Markdown, behält es als HTML bei oder extrahiert nur den Textinhalt der Seite.
- Unterstützt eigene CSS-Selektoren, um bestimmte Teile der Seite zu extrahieren.
- Verarbeitet HTTP-Anfragen und Seitenabrufe über Browser.
- Umfassend anpassbar mit eigenen Headern, Cookies, Proxys und weiteren Optionen. Fast alle Optionen, die im Code verfügbar sind, können Sie auch im Terminal nutzen.
- und mehr...
🔧 Technische Verbesserungen¶
Leistungsverbesserungen¶
- Fetcher ist jetzt 4-mal schneller - Ja, Sie haben richtig gelesen!
- DynamicFetcher ist jetzt etwa 60 % schneller - Je nach Konfiguration deutlich schneller, besonders im Stealth-Modus
- StealthyFetcher ist jetzt 20–30 % schneller - Dank der neuen Struktur und unserer eigenen Implementierung, die wir nun statt der Python-Schnittstelle von
Camoufoxeinsetzen - Zusammen 50 % oder mehr Geschwindigkeitsgewinn bei den wichtigsten Auswahlmethoden (
find_by_text,find_similar,find_by_regex,relocateusw.) 🚀 - Etwa 10 % mehr Geschwindigkeit bei CSS/XPath-Methoden für den ersten Treffer -
css_firstundxpath_firstsind jetzt schneller alscssundxpath - Die Methode
get_all_text()ist 40 % schneller bei der Inhaltsextraktion - 20 % mehr Geschwindigkeit beim adaptiven Wiederfinden von Elementen
- Navigationseigenschaften optimiert - Eigenschaften wie
next,previous,below_elementsund weitere sind jetzt spürbar schneller - 5-mal schnellere Textbereinigung
- Geringerer Speicherbedarf durch optimierte Imports und weniger Verwaltungsaufwand
- ⚡ Blitzschnelle Imports: Kürzere Startzeit durch optimiertes Laden von Modulen
- Bessere Benchmarks: Durch all diese Verbesserungen ist Scrapling im Vergleich zu anderen Bibliotheken noch viel schneller als zuvor (1775-mal schneller als BeautifulSoup und 5,1-mal schneller als AutoScraper, siehe Benchmarks)
Architektur, Codequalität und Bedienung¶
- Dauerhafter Kontext: Alle Browser-Fetcher verwenden jetzt standardmäßig einen dauerhaften Kontext. (Löst auch #64)
- Schnelle Prüfung aller Browser-Fetcher mit msgspec, bevor Anfragen ausgeführt werden. So lassen sich Fehler leichter finden.
- Alle Cookies, die Fetcher zurückgeben, entsprechen jetzt dem Format, das derselbe Fetcher akzeptiert. Sie können Cookies also abrufen und erneut an alle Fetcher und ihre Sitzungsklassen übergeben.
- Schnellere Codeprüfung und Formatierung durch den Wechsel zu
ruff - Modernes Build-System: Wechsel von setup.py zu pyproject.toml 📦
- Bessere GitHub Actions und Workflows für einfachere Entwicklung und Tests
- 🎨 Verbesserte Typangaben: Vollständige Typangaben nach modernen Python-Standards für bessere IDE-Unterstützung und mehr Zuverlässigkeit
- Aufgeräumter Code: Nicht mehr genutzten Code entfernt und Kernfunktionen optimiert 🧹
- 🚀 Abwärtskompatibilität: Kurzformen ergänzt, damit älterer Code weiter funktioniert
Inkompatible Änderungen¶
Erforderliche Python-Version¶
- Python 3.10+ erforderlich: Python 3.9 und ältere Versionen werden nicht mehr unterstützt
Namen von Klassen und Methoden¶
Diese Umbenennungen sollen die Namen klarer und einheitlicher machen, besonders für neue Nutzer.
Adaptor→Selector: Die zentrale Parser-Klasse wurde umbenannt (kann zur Abwärtskompatibilität weiterhin alsAdaptorimportiert werden)Adaptors→Selectors: Die Sammlungsklasse wurde umbenannt (kann zur Abwärtskompatibilität weiterhin alsAdaptorsimportiert werden)auto_match→adaptive: Parameter in allen Methoden umbenanntadaptor_arguments→selector_config: Konfigurationsparameter umbenanntautomatch_domain→adaptive_domain: Domain-Parameter umbenanntadditional_arguments→additional_args: Parametername verkürzt- ⚠️
text/body→content: Der Parameter des Selector-Konstruktors akzeptiert jetzt sowohlstrals auchbytes PlayWrightFetcher→DynamicFetcher: Die Klasse für Browser-Automatisierung wurde umbenannt (kann zur Abwärtskompatibilität weiterhin alsPlayWrightFetcherimportiert werden)- DynamicFetcher enthält die NSTBrowser-Logik und ihre Argumente nicht mehr, da es keinen Sinn mehr hat, sie beizubehalten.
- Das Argument headless von StealthyFetcher akzeptiert 'virtual' nicht mehr, da wir die Camoufox-Bibliothek nur noch verwenden, um den Installationspfad des Browsers und die übrigen Startoptionen zu ermitteln
🐛 Fehlerbehebungen¶
- Das Zählen verschachtelter Kindelemente in ignorierten Tags für
get_all_textkorrigiert (#61) - Installationsprobleme durch Leerzeichen im Pfad zur ausführbaren Python-Datei behoben (#57)
- Threading-Probleme im Speichersystem bei der Verarbeitung von Rekursionen mit aktivierter adaptiver Funktion behoben
- Probleme mit der Rangfolge von Argumenten in
FetcherSessiondurch das Sentinel-Muster behoben - Die Verarbeitung von Proxy-Typen in
StealthyFetcherkorrigiert - Konflikte zwischen den Argumenten
refererundgoogle_searchbehoben - Probleme beim asynchronen Einfügen von Skripten zur Tarnung behoben
v0.2.99 - 2025-04-08¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten.
Was sich geändert hat¶
Neue Website mit vollständiger Dokumentation¶
- Ja, endlich 😄 Schauen Sie hier vorbei
Einheitliche Import-Logik für Fetcher¶
- Sie können jetzt alle Fetcher mit
from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, PlayWrightFetcherimportieren und ohne Initialisierung direkt verwenden, etwa mitpage = Fetcher.get(...).
Dies ersetzt den alten Importfrom scrapling.defaults import Fetcher, AsyncFetcher, StealthyFetcher, PlayWrightFetcher.
Inkompatible Änderung: automatch ist jetzt standardmäßig deaktiviert¶
- Es gibt jetzt eine neue Vorgehensweise, um automatch oder andere Parser-Optionen über Fetcher zu aktivieren. Einzelheiten finden Sie auf der Dokumentationsseite.
Die alten Imports und die alte Logik bleiben zur Abwärtskompatibilität nutzbar, geben aber eine Warnung aus.
Neue Optionen für Fetcher¶
- Sowohl
StealthyFetcherals auchPlayWrightFetcherhaben jetzt beim Abrufen das neue Argumentwait. Damit wartet der Fetcher eine bestimmte Zeit in Millisekunden, bevor er die Seite schließt und die Antwort zurückgibt. - Die Methoden von
StealthyFetcher,fetchundasync_fetch, haben jetzt das Argumentadditional_arguments. Damit können Sie zusätzliche Einstellungen an Camoufox übergeben, die Vorrang vor den Scrapling-Einstellungen haben (#54 )
Fehlerbehebungen¶
- Einen Fehler beim Erfassen von Weiterleitungen in
async_fetchin den KlassenStealthyFetcherundPlayWrightFetcherbehoben.
Vielen Dank für Ihre Unterstützung und Spenden!
v0.2.98 - 2025-03-17¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
Verschiedene Verbesserungen bei Speicherbedarf und Geschwindigkeit¶
- Alle Auswahlmethoden benötigen nur noch etwa 40 % des bisherigen Speichers und sind etwas schneller.
- Alle Untermodule der Bibliothek werden jetzt erst bei Bedarf geladen. Sie laden also nur, was Sie verwenden. Zum Beispiel:
Vor dem Update benötigte der Import
from scrapling import Adaptor30-40mbRAM, weil dabei auch alle Fetcher und weitere Teile geladen wurden. Jetzt sind es nur noch~1.2mb. - Durch das letzte Update benötigte die Bibliothek bei einem großen Anfrage-Pool nur noch etwa 32 % des bisherigen Speichers. Jetzt haben wir den Cache weiter angepasst, um noch weniger zu verbrauchen.
- Der Parser ist insgesamt um 2-5 % schneller
Vielen Dank für Ihre Unterstützung und Spenden!
v0.2.97 - 2025-03-15¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
Weniger Speicherbedarf und etwas mehr Geschwindigkeit bei allen Fetchern.¶
- Neue Grenzen für die Cache-Größe in der gesamten Bibliothek senken den Speicherbedarf deutlich, wenn Sie viele Anfragen oder Operationen ausführen.
- Große Teile der Fetcher wurden überarbeitet, um die Wartung zu erleichtern und die Geschwindigkeit etwas zu erhöhen.
Fehlerbehebungen¶
- Einen Fehler in
TextHandlerbehoben: Wenn die Klasse allein importiert wurde, wandelte sie Werte, die keine Zeichenketten waren, in eine leere Zeichenkette um. Jetzt wird jeder Wert fürTextHandlerzuerst in eine Zeichenkette und dann inTextHandlerumgewandelt. Das gilt für jeden übergebenen Wert. Schließlich sollTextHandler, wie der Name sagt, nur mit Zeichenketten arbeiten! (#45 ) - Einen Fehler behoben, bei dem die
retries-Argumente in den meisten Methoden von AsyncFetcher nicht berücksichtigt wurden.
Sonstiges¶
- Die Typangaben für die meisten Argumente aller Fetcher wurden klarer und genauer gemacht.
Vielen Dank für Ihre Unterstützung und Spenden!
v0.2.96 - 2025-03-05¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
- Die Option
-ffürscrapling installergänzt, um die Neuinstallation der Browser-Abhängigkeiten zu erzwingen. Ich empfehle, jetztscrapling install -fauszuführen, damit Sie den großen Geschwindigkeitsgewinn vonStealthyFetchermit der neuen Camoufox-Browserversion nutzen können :) - Einen Fehler in
TextHandlerbehoben, bei dem Slicing einTextHandlers-Objekt statt einesTextHandler-Objekts zurückgab. Auch die Typangabe wurde korrigiert (#41 ) - Ein Problem behoben, bei dem
scrapling installin manchen Fällen eine Python-Shell öffnete!
v0.2.95 - 2025-02-25¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
- Einen Fehler in
Fetcherbehoben, bei dem die mit dem Argumentstealthy_headerserzeugten Header einige vom Nutzer gesetzte Header wieAcceptüberschrieben (#39 ) - Die Erzeugung der Header etwas verbessert. Das sollte die Geschwindigkeit leicht erhöhen.
v0.2.94 - 2025-02-22¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
- Die Eigenschaft
historyfür alle Fetcher ergänzt, um Weiterleitungen anzuzeigen (#32 ) - Die Logik des Arguments
case_sensitivefür allere/re_first-Methoden korrigiert. Wenn Sie dieses Argument genutzt haben, kann Ihr Code jetzt andere Ergebnisse liefern (aber vielleicht haben Sie das verdient, wenn Sie den Fehler bemerkt und kein Issue eröffnet haben, LOL). - Abhängigkeiten aktualisiert und
coopin der Camoufox-Engine (StealthyFetcher) wieder aktiviert.
v0.2.93 - 2025-01-31¶
Dieses Update ist für alle wichtig, die Scrapling in vollem Umfang nutzen möchten
Was sich geändert hat¶
- Der Rückgabetyp ist jetzt im gesamten Parser einheitlich. Sie erhalten immer einen dieser Typen:
Adaptor,Adaptors,TextHandler,TextHandlers,Noneoder eine Liste bei gemischten Ergebnissen, etwa durch einen kombinierten CSS-Selektor. Das erleichtert das Programmieren mit weniger manuellen Typprüfungen, macht die Bibliothek stabiler und ermöglicht immer das Verketten von Methoden. - Große Teile des Parsers, besonders die Klasse
Adaptor, wurden überarbeitet und sind jetzt übersichtlicher und vor allem schneller. Fast alle Methoden und Eigenschaften, besonders die Suchmethoden, sind jetzt 5-40 % schneller. Manche haben noch mehr zugelegt:find_by_regexist etwa 60 % schneller! Die automatch-Funktion ist etwa 5 % schneller. - Logikfehler in den Methoden
find_all/findbehoben, durch die übergebene Filter manchmal mit ODER und manchmal mit UND verknüpft wurden. Jetzt müssen alle zurückgegebenen Elemente alle übergebenen Filter erfüllen. - Alle Methoden für reguläre Ausdrücke geben jetzt
TextHandler/TextHandlerszurück, damit sich Methoden leichter verketten lassen. - Die neue Eigenschaft
below_elementsergänzt. Sie gibt einAdaptors-Objekt mit allen Elementen unterhalb des aktuellen Elements im DOM-Baum zurück. - Alle Methoden und Eigenschaften, die HTML-Quelltext als Zeichenkette zurückgaben, geben ihn jetzt als
TextHandlerzurück. So können Sie darauf leichter reguläre Ausdrücke und weitere Funktionen anwenden. - StealthyFetcher ist jetzt etwas schneller und besser getarnt. Außerdem können Sie jetzt auf Captchas in iframes klicken, etwa auf Cloudflare Turnstile.
- Die automatische Vervollständigung und die Typangaben wurden in fast der Hälfte der Bibliothek deutlich verbessert, besonders bei
Adaptor,TextHandlerundTextHandlers. - Ein
TextHandlergibt beim Slicing, bei Indexzugriffen oder bei Verwendung der Methodesplitjetzt ein weiteresTextHandler-Objekt statt einer normalen Python-Zeichenkette zurück. Fast alle üblichen Zeichenkettenoperationen und Methoden geben jetzt weitereTexthandler-Objekte statt normaler Zeichenketten zurück, damit sich Methoden und Funktionen immer verketten lassen. - Einige kleine Fehler und Tippfehler behoben. Zum Beispiel führte Fetcher async_put eine POST-Anfrage statt einer PUT-Anfrage aus 😶🌫️
- Die README etwas verbessert, bis ich die Dokumentationswebsite fertig habe.
Dies sollte nur ein kleines Update vor Version 0.3 werden, aber ich wollte es noch etwas besser machen.
v0.2.92 - 2024-12-26¶
Was sich geändert hat¶
- Antworten von Browser-Fetchern nutzen jetzt zuverlässigere Datenquellen, wenn die geladene Seite viele iframes enthält.
- Die Installation von
Scraplingist jetzt noch einfacher: Installieren Sie es mit pip, führen Sie dannscrapling installim Terminal aus, und Sie können loslegen! - Eine ungenaue Typangabe im Parser korrigiert.
v0.2.91 - 2024-12-19¶
Was sich geändert hat¶
- Einen Fehler behoben, bei dem die Protokollmeldung zum Seitenabruf nur bei der ersten Anfrage erschien.
- Beim Aufrufen einer Seite gibt die Playwright-API standardmäßig die erste Antwort zurück, die den an
gotoübergebenen Ladezustand["load", "domcontentloaded", "networkidle"]erfüllt. Wenn eine Website zuerst eine Warteseite wie die von Cloudflare zeigt und danach zur eigentlichen Website weiterleitet, gibt Playwright den ersten Statuscode zurück, etwa 403. Dieses Update löst das Problem fürPlaywrightFetcherundStealthyFetcher, die beide die Playwright-API nutzen. Das Ergebnis hängt also nicht mehr vom Standardverhalten von Playwright ab. - Unterstützung für SOCKS-Proxys in der Klasse
Fetcherergänzt. - Die Typangabe des Arguments
wait_selector_statekorrigiert, damit die automatische Vervollständigung die richtigen möglichen Werte anzeigt.
v0.2.9 - 2024-12-16¶
Was sich geändert hat¶
Neue Funktionen¶
- Die lang erwartete Unterstützung für asynchronen Code ist da! Es gibt jetzt die Klasse
AsyncFetcherals asynchrone Variante vonFetcher. Außerdem habenStealthyFetcherundPlayWrightFetcherdie neue Methodeasync_fetchmit denselben Optionen.
>> from scrapling import StealthyFetcher
>> page = await StealthyFetcher().async_fetch('https://www.browserscan.net/bot-detection') # the async version of fetch
>> page.status == 200
True
- Die Klasse
StealthyFetcherhat jetzt das Argumentgeoipin ihren Abrufmethoden. Wenn es aktiviert ist, verwendet die Klasse automatisch Längengrad, Breitengrad, Zeitzone, Land und regionale Einstellungen der IP-Adresse und passt dann die WebRTC-IP-Adresse entsprechend an. Sie bestimmt außerdem die Browsersprache anhand der Verteilung der Sprachen in der Zielregion und stellt sie entsprechend ein. - Das Argument
retrieszu den KlassenFetcher/AsyncFetcherhinzugefügt. Damit können Sie festlegen, wie oft jede überhttpxausgeführte Anfrage erneut versucht wird. - Die Methode
url_joinzuAdaptorund den Fetchern hinzugefügt. Sie verbindet eine relative URL mit der aktuellen URL zu einer vollständigen absoluten URL! - Die Methode
keep_cdatazuAdaptorund den Fetchern hinzugefügt, damit Sie bei Bedarf verhindern können, dass der Parser CDATA entfernt. - In
Adaptor/Responsegibt die Methodebodyjetzt nach Möglichkeit die rohe HTML-Antwort zurück, ohne sie in der Bibliothek zu verarbeiten. - Protokollierung zur Klasse
Responsehinzugefügt. Wenn Sie Fetcher verwenden, erhalten Sie jetzt eine Protokollmeldung mit Informationen zur Antwort. Beispiel:
>> from scrapling.defaults import Fetcher
>> Fetcher.get('https://books.toscrape.com/index.html')
[2024-12-16 13:33:36] INFO: Fetched (200) <GET https://books.toscrape.com/index.html> (referer: https://www.google.com/search?q=toscrape)
>>
- Wenn Sie übliche Zeichenkettenmethoden auf einem
TextHandlerverwenden, etwa.replace(), erhalten Sie jetzt ein weiteresTextHandler-Objekt. Zuvor wurde eine normale Zeichenkette zurückgegeben. - Deutliche Geschwindigkeitsverbesserungen in der gesamten Bibliothek und insgesamt bessere Tarnung in den Fetcher-Klassen.
- Einfache Funktionen wie
extract_first`extract` ergänzt, die dasselbe Ergebnis wie das übergeordnete Objekt zurückgeben. Sie sind nur dazu da, Code bei Bedarf leichter von Scrapy/Parsel nach Scrapling zu kopieren, da diese Funktionen dort verwendet werden! - Da große Teile des Codes überarbeitet wurden und Caching an den richtigen Stellen eingesetzt wird, sind viele Anfragen auf einmal jetzt deutlich schneller.
Inkompatible Änderungen¶
- Python 3.8 wird nicht mehr unterstützt. (Hauptsächlich, weil Playwright die Unterstützung beendet hat, aber diese Version war ohnehin problematisch.)
- Das Argument
debugwurde aus der gesamten Bibliothek entfernt. Wenn Sie Debugging aktivieren möchten, führen Sie nach dem Import der Bibliothek Folgendes aus:
Fehlerbehebungen¶
- WebGL ist jetzt standardmäßig aktiviert, da viele Schutzsysteme inzwischen prüfen, ob es aktiviert ist.
- Einige Fehler und Tippfehler in der Dokumentation und README korrigiert.
Verbesserungen der Bedienung¶
- Die gesamte Protokollierung läuft jetzt unter dem Logger-Namen
scrapling, damit sie sich einfacher und übersichtlicher steuern lässt. Zuvor wurde der Root-Logger verwendet. - Den Testordner übersichtlicher aufgebaut und Tests für die neuen Funktionen ergänzt. Alle Tests wurden übersichtlicher neu geschrieben und weitere Tests für eine höhere Abdeckung hinzugefügt.
- Einen großen Teil des Codes überarbeitet, damit er übersichtlicher und leichter zu warten ist.
All diese Änderungen waren ursprünglich für 0.3 geplant. Ich habe sie aber schon hier aufgenommen, weil es bis zur nächsten Version noch etwas dauern wird. Als Nächstes werde ich die ausführliche Dokumentationswebsite fertigstellen und dann an Version 0.3 arbeiten.
v0.2.8 - 2024-11-30¶
Was sich geändert hat¶
- Dieses kleine Update enthält einige wichtige Verbesserungen für die Nutzung des Codes und korrigiert einen Tippfehler in der Haupt-README (#20).
v0.2.7 - 2024-11-26¶
Was sich geändert hat¶
Neue Funktionen¶
- Wenn Sie das Argument
wait_selectormit den KlassenStealthyFetcherundPlayWrightFetcherverwenden, wartet Scrapling danach erneut wie üblich darauf, dass JavaScript vollständig geladen und ausgeführt wird. Wenn Sie das Argumentnetwork_idleverwenden, wartet Scrapling anschließend auch erneut auf diesen Zustand. Sind alle Zustände bereits erreicht, gibt es natürlich keine Wartezeit. - In
StealthyFetcherkönnen Sie mit dem Argumentdisable_adsjetzt Werbung zulassen oder blockieren. Die Option ist standardmäßig aktiviert und installiert die Erweiterungublock origin. - Die regionalen Einstellungen von
PlayWrightFetcherkönnen Sie jetzt mit dem Argumentlocalefestlegen. Der Standardwert bleibten-US. - Einfache Anfragen über
Fetcherakzeptieren jetzt Proxys im Formathttp://username:password@localhost:8030. - Der Stealth-Modus von
PlayWrightFetcherwurde etwas verbessert.
Fehlerbehebungen und Verbesserungen¶
- Die Aktivierung von Proxys in der Klasse
PlayWrightFetcherhängt jetzt nicht mehr davon ab, ob der Modusstealthaktiviert ist (danke an @AbdullahY36 für den Hinweis). ResponseEncodingprüft jetzt, ob die in der Antwort angegebene Kodierung für die Seite verwendet werden kann. Führt sie zu einem Fehler, verwendet Scraplingutf-8.
v0.2.6 - 2024-11-24¶
Was sich geändert hat¶
Neue Funktionen¶
PlayWrightFetcherkann jetzt den echten Browser direkt verwenden. Übergeben Sie dazu das Argumentreal_chromeanPlayWrightFetcher.fetch. Dafür muss Chrome installiert sein. Scrapling startet eine Instanz Ihres Chrome-Browsers, und Sie können die meisten Optionen wie gewohnt verwenden. (Zuvor war dies nur mit dem Argumentcdp_urlmöglich.)- Die Versionsangabe der für echte Browser erzeugten Header erhöht.
Fehlerbehebungen¶
- Das Format der von
BrowserForgeerzeugten Browser-Header war veraltet. Dadurch erkannten einige Schutzsysteme Scrapling. Deshalb wirdBrowserForgejetzt nur noch verwendet, um einen echten User-Agent zu erzeugen. - Das Argument
hide_canvasist jetzt standardmäßig deaktiviert, da Googles ReCaptcha es erkennt.
v0.2.5 - 2024-11-23¶
Was sich geändert hat¶
Fehlerbehebungen¶
- Einen Fehler beim Argument 'wait_selector' behoben, wenn es mehr als 1 Element fand. Dies betrifft die Klassen
StealthyFetcherundPlayWrightFetcher. - Den Kodierungstyp korrigiert, wenn der Header
content_typeeinen Wert mit Parametern wiecharsetenthält (danke an @andyfcx für #12 ).
Verbesserungen der Bedienung¶
- Weitere Tests für neue Teile des Codes ergänzt. Die Tests werden jetzt in Threads ausgeführt.
- Ich habe die Docstrings angepasst, damit Sphinx apidoc und ähnliche Werkzeuge sie korrekt darstellen können.
Neue Mitwirkende¶
- @andyfcx hat in #13 erstmals mitgewirkt
v0.2.4 - 2024-11-20¶
Was sich geändert hat¶
Fehlerbehebungen¶
-
Einen Fehler beim Abrufen der Antwort-Bytes nach Verwendung des Arguments
network_idlein den KlassenStealthyFetcherundPlayWrightFetcherbehoben.
Er verursachte die folgende Fehlermeldung: -
Die PlayWright-API gibt bei Antworten manchmal einen leeren Statustext zurück. In diesem Fall ermittelt
Scraplingihn jetzt selbst. Dies betrifft die KlassenStealthyFetcherundPlayWrightFetcher.
v0.2.3 - 2024-11-19¶
Was sich geändert hat¶
Fehlerbehebungen¶
- Einen Fehler bei der Installation mit pip behoben, durch den der Stealth-Modus des PlayWright-Fetchers überhaupt nicht funktionierte.
v0.2.2 - 2024-11-16¶
Was sich geändert hat¶
Neue Funktionen¶
-
Wenn Sie dem erzeugten
Adaptor-Objekt keine Argumente übergeben und die Standardwerte nutzen möchten, können Sie für übersichtlicheren Code stattdessen diesen Import verwenden>> from scrapling.default import Fetcher, StealthyFetcher, PlayWrightFetcher >> page = Fetcher.get('https://example.com', stealthy_headers=True)Andernfalls
Fehlerbehebungen¶
- Einen Fehler mit dem
Response-Objekt behoben, der gestern mit Patch v0.2.1 eingeführt wurde und in manchen Fällen bei verschachtelter Auswahl oder Analyse auftrat.
v0.2.1 - 2024-11-15¶
Was sich geändert hat¶
Neue Funktionen¶
-
Das von allen Fetchern zurückgegebene
Response-Objekt entspricht jetzt demAdaptor-Objekt, hat aber zusätzlich diese Attribute:status,reason,cookies,headersundrequest_headers. Die Attributecookies,headersundrequest_headerssind immer vom Typdictionary.
Ihr Code kann jetzt also so aussehen:>> from scrapling import Fetcher >> page = Fetcher().get('https://example.com', stealthy_headers=True) >> print(page.status) 200 >> products = page.css('.product')Statt wie bisher
>> from scrapling import Fetcher >> fetcher = Fetcher().get('https://example.com', stealthy_headers=True) >> print(fetcher.status) 200 >> page = fetcher.adaptor >> products = page.css('.product')Die Eigenschaft
.adaptorfunktioniert zur Abwärtskompatibilität aber weiterhin. -
Die Klassen
StealthyFetcherundPlayWrightFetcherakzeptieren jetzt beim Abrufen ein Argumentproxy, das eine Zeichenkette oder ein Dictionary sein kann. - Die Klasse
StealthyFetcherhat jetzt das Argumentos_randomizein der Methodefetch. Wenn es aktiviert ist, wählt Scrapling die Betriebssystem-Fingerprints zufällig aus. Standardmäßig passen die Fingerprints zum aktuellen Betriebssystem.
Fehlerbehebungen¶
- Einen Fehler beim Übergeben von Headern mit der Klasse
Fetcherbehoben. - Einen Fehler beim Parsen von JSON-Antworten aus Fetcher-Klassen behoben.
Verbesserungen der Bedienung¶
- Die Textfunktion versuchte bisher, HTML-Kommentare vor der Rückgabe des Textes zu entfernen. Das führte in manchen Fällen zu Fehlern und machte den Code unnötig kompliziert. Jetzt verwendet sie wieder das Standardverhalten von lxml. Alle Operationen, die den Text von Elementen nutzen, etwa Selektoren, sind dadurch etwas schneller. Wenn Scrapling HTML-Kommentare aus Elementen vor der Textrückgabe entfernen soll, um das ungewöhnliche Aufteilen des Textes in lxml/parsel/scrapy zu vermeiden, lassen Sie das Argument
keep_commentseinfach wie standardmäßig auf True gesetzt.
v0.2 - 2024-11-11¶
Was sich geändert hat¶
Neue Funktionen¶
- Die neue Funktion
Fetchersmit 3 Haupttypen ist da. Damit ruft Scrapling Seiten für Sie ab, mit VIELEN Optionen!- Die Klasse
Fetcherfür einfache HTTP-Anfragen - Die Klasse
StealthyFetcherist ein vollständig getarnter Fetcher, der eine zur Tarnung angepasste Firefox-Version nutzt. - Die Klasse
PlayWrightFetcherermöglicht Browser-Anfragen mit unverändertem PlayWright, mit meinem Stealth-Modus für PlayWright, mit echten Browsern über CDP und mit NSTBrowser über dessen Docker-Browserless-Image!
- Die Klasse
- Die völlig neuen Methoden
find_all/findhinzugefügt, mit denen Sie Elemente auf der Seite ganz einfach wie durch dunkle Magie finden! - Die Methoden
filterundsearchzur KlasseAdaptorshinzugefügt, um Gruppen vonAdaptor-Objekten leichter gemeinsam zu verarbeiten. - Die Methoden
css_firstundxpath_firstfür eine einfachere Nutzung hinzugefügt. - Den neuen Klassentyp
TextHandlershinzugefügt. Damit können SieTextHandler-Objekte gemeinsam verarbeiten, ähnlich wie mit der KlasseAdaptors. - Die Methoden
generate_full_css_selectorundgenerate_full_xpath_selectorhinzugefügt.
Fehlerbehebungen¶
- Die Klasse
Adaptorsgibt mitre_firstjetzt das erste passende Ergebnis aus allen enthaltenenAdaptor-Objekten zurück. Zuvor gab sie fälschlicherweise die Ergebnisse vonre_firstallerAdaptor-Objekte zurück. - Wenn Sie Text aus ausgewählten Elementen abrufen, etwa mit der CSS-Funktion
::textüber Methoden wie.cssoder.xpath, gibt dasAdaptor-Objekt jetztTextHandlersstatt einer Liste von Zeichenketten zurück. Sie können also jetztpage.css('something::text').re_first(r'regex_pattern').json()stattpage.css('something::text')[0].re_first(r'regex_pattern').json()verwenden. - Die Argumente von re/re_first in
Adaptor/Adaptorsstimmen jetzt mit denen vonTextHandlerüberein. Sie haben also jetzt die Argumenteclean_matchundcase_sensitive. - Das Argument
auto_matchist jetzt bei der Initialisierung vonAdaptorstandardmäßig aktiviert. Sie müssen es aber weiterhin bei der Elementauswahl aktivieren, wenn Sie die Funktion nutzen möchten. (Kein Fehler, sondern eine Designentscheidung.) - Viele Typangaben an verschiedenen Stellen korrigiert, um die automatische Vervollständigung beim Programmieren mit Scrapling zu verbessern.
Verbesserungen der Bedienung¶
- Die Methoden
css_selectorundxpath_selectoringenerate_css_selectorundgenerate_xpath_selectorumbenannt. Das macht die Namen klarer und stört die automatische Vervollständigung beim Programmieren nicht mehr. - Den größten Teil des alten Codes in ein Unterpaket
coreverschoben und weitere Designentscheidungen getroffen, um den Code übersichtlicher und die spätere Wartung einfacher zu machen. - Den Testordner übersichtlicher aufgebaut und Tests für die neuen Funktionen ergänzt. Außerdem werden tox-Umgebungen jetzt auf GitHub zwischengespeichert, damit die automatischen Tests bei jedem Commit schneller laufen.
v0.1.2 - 2024-10-16¶
Änderungsverlauf:
- Einen Fehler behoben, bei dem das Argument
keep_commentsnicht wie vorgesehen funktionierte. -
Die Textfunktion so angepasst, dass sie HTML-Kommentare vor dem Extrahieren des Textes automatisch aus Elementen entfernt, um das abweichende Verhalten von Lxml zu vermeiden. Zum Beispiel:
>>> page = Adaptor('<span>CONDITION: <!-- -->Excellent</span>', keep_comments=True) >>> page.css('span::text') ['CONDITION: ', 'Excellent']Dies war zuvor wegen des Standardverhaltens von Lxml das Ergebnis. Jetzt wird der vollständige Text 'CONDITION: Excellent' zurückgegeben. Dieses Verhalten ist auch aus parsel\scrapy bekannt. Deshalb wollte ich es hier abfangen.
-
Einen Fehler behoben, bei dem die von der Bibliothek erzeugte SQLite-Datenbankdatei bei
pip uninstall scraplingoder ähnlichen Befehlen nicht gelöscht wurde.
v0.1.1 - 2024-10-14¶
Kleine Korrekturen
v0.1 - 2024-10-13¶
Vollständiger Änderungsverlauf: https://github.com/D4Vinci/Scrapling/commits/v0.1