Epublifier – Tool zum Scrapen von Seiten (Büchern, Handbüchern) für Offline-Lektüre
(github.com/maoserr)- Epublifier ist eine Browser-Erweiterung, die eine Liste von HTML-Seiten einer Website extrahiert, daraus ein ePub-Buch kompiliert und es Nutzerinnen und Nutzern ermöglicht, dieses auf den eReader ihrer Wahl zu übertragen
- Fortgeschrittene Nutzer, die JavaScript schreiben können, können Parser-Definitionen hinzufügen, um die Parsing-Logik für bestimmte Websites anzupassen
- Unterstützt werden Novel Update, Wuxia World, viele Websites aus awesome-read-the-docs, benutzerdefinierte Websites auf Basis von UL/OL-Inhaltsverzeichnissen, regulären Ausdrücken für Linktexte oder Query Selectors sowie benutzerdefinierte Webapps mit Titelelement und Next-Button
- Da Epublifier im Browser läuft, kann es auch Seiten verarbeiten, deren Text dynamisch per JavaScript erzeugt oder geladen wird, und bietet UI-basiertes Scraping, bei dem zentrale Elemente per Mausklick ausgewählt werden
- Es ist nicht für wiederholt ausgeführte Hintergrundjobs oder robuste dedizierte Scraper gedacht; bei Websites, die bereits von anderen Programmen gut verarbeitet werden, ist gegenüber Tools mit spezieller Konfiguration keine bessere Leistung zu erwarten
Was Epublifier macht
- Epublifier ist ein Tool, das Websites in ePub-Dateien umwandelt
- Es extrahiert von einer Website eine Liste von HTML-Seiten und kompiliert diese zu einem ePub-Buch, das Nutzerinnen und Nutzer in den gewünschten eReader importieren können
- Nutzer, die JavaScript schreiben können, können zusätzliche Parser-Definitionen hinzufügen, um das Parsing beliebiger Websites anzupassen
- Die Nutzung ist im Wiki beschrieben
Unterstützte Websites und Seitenstrukturen
- Derzeit werden folgende Ziele unterstützt
-
Novel Update
-
Wuxia World
- Viele Websites aus awesome-read-the-docs
- Benutzerdefinierte Websites, die UL/OL-Elemente als Inhaltsverzeichnis verwenden
- Benutzerdefinierte Websites, die reguläre Ausdrücke für Linktexte oder Query Selectors verwenden
- Benutzerdefinierte Webapps mit vordefiniertem Titel- beziehungsweise Header-Element und anklickbarem Next-Button
-
Installation
- Die Firefox-Erweiterung kann über Firefox Add-ons installiert werden
- Die Chrome-Erweiterung kann über den Chrome Web Store installiert werden
Nutzungsbeispiele
- Es gibt ein Beispiel zum Extrahieren einer Seitenliste aus Novel Update
- Es gibt ein Beispiel zum Durchlaufen einer Webapp in Wuxia World, indem dem Next-Button gefolgt wird
- Es gibt ein Beispiel zum Extrahieren von Dokumentation aus anderen Dokumentationsseiten wie der FastAPI-Dokumentation
Warum es als Browser-Erweiterung gebaut wurde
- Dieses Tool ist für die temporäre ePub-Erzeugung auf Websites gedacht, die sich mit klassischen request-basierten CLI-Skripten oder einigen Chrome-Erweiterungen, die anhand geöffneter Tabs oder Fenster scrapen, nicht gut scrapen lassen
- Bestehende CLI-Scraper oder andere Erweiterungen sind meist auf vordefinierte Websites zugeschnitten und passen möglicherweise nicht zu Websites außerhalb dieses Bereichs
- Einige Tools erfordern nicht wenig Konfiguration oder das Schreiben von Code
- Manche Websites erzeugen oder laden Text dynamisch per JavaScript, sodass der Browser JavaScript ausführen muss
- Genau diese Lücke war der wichtigste Grund für die Entwicklung von Epublifier
- Da es im Browser ausgeführt wird, ist die Wahrscheinlichkeit, erkannt oder blockiert zu werden, möglicherweise geringer
Vorgesehene Nutzung und Grenzen
- Epublifier ist nicht als robuster Scraper oder wiederholt ausgeführter geplanter Hintergrundjob gedacht
- Dass die zu scrapenden Kernelemente in der UI ausgewählt werden, hängt ebenfalls mit dieser Nutzungsweise zusammen
- Ziel ist Allgemeingültigkeit, sodass sich Inhalte auch ohne site-spezifische Konfiguration relativ einfach mit wenigen Mausklicks scrapen lassen
- Wenn eine Website bereits von einem anderen Programm oder einer anderen Erweiterung gut verarbeitet wird, sind diese Tools auf diese Website abgestimmt; Epublifier wird daher nicht besser funktionieren
- Es ist für Fälle gedacht, in denen man eine Website ein- oder zweimal scrapen möchte, ohne viel Zeit in Coding oder Konfiguration zu investieren
Build
- Die Build-Umgebung ist Windows 10 mit NPM 8.1.2
- Der Build-Ablauf ist wie folgt
- NPM installieren
- Im Basisverzeichnis
npm installausführen - Für Firefox
npm run build_ffausführen - Für Chrome
npm run buildausführen
Verwendete Komponenten
- Für die ePub-Erzeugung wird jEpub verwendet
1 Kommentare
Meinungen auf Hacker News
Was diese Erweiterung von anderen Scrapern unterscheidet: Sie ist ein Tool, um ad hoc EPUBs zu erzeugen für Websites, die sich mit klassischen Scrapern nur schlecht erfassen lassen.
Übliche Kommandozeilen-Scraper oder andere Erweiterungen haben meist vorab festgelegte unterstützte Sites oder erfordern einiges an Konfiguration bzw. Code.
Außerdem erzeugen oder laden manche Sites den Haupttext dynamisch per JavaScript, sodass der Browser selbst JavaScript ausführen muss; genau das war die größte Lücke.
Da es im Browser läuft, ist möglicherweise auch die Wahrscheinlichkeit geringer, erkannt oder blockiert zu werden.
Es ist nicht dafür gedacht, robust wie ein regelmäßig laufender geplanter Hintergrundjob eingesetzt zu werden; deshalb gibt es eine UI, mit der man die zentralen Elemente zum Scrapen auswählt.
Das Tool soll ohne site-spezifische Konfiguration mit ein paar Mausklicks Zeit sparen, wenn man ein- oder zweimal etwas scrapen möchte. Wenn eine andere Anwendung oder Erweiterung eine Site bereits gut verarbeitet, ist diese vermutlich die bessere Wahl.
Ich habe es gebaut, weil ich mich selten lange auf derselben Site aufhalte.
Aus Sicht von jemandem, der etwas Ähnliches selbst gebaut hat, ist der interessante Teil dieses Tools die UI, mit der man die Inhaltsextraktion auf beliebigen Sites iterativ anpassen kann.
Dass sich der Extraktionsprozess komplett über eine GUI steuern lässt, ist deutlich flexibler als der übliche Ansatz.
Es wäre wirklich beeindruckend, wenn es sogar Sites verarbeiten könnte, bei denen alle Abschnitte hinter einer Accordion-UI liegen und erst nach dem Aufklappen sichtbar werden, wobei beim Öffnen eines Abschnitts ein anderer wieder geschlossen wird.
Ich baue gerade etwas sehr Ähnliches.
Ich erstelle einen Web-Scraper und EPUB-Parser für Blogs und vor allem Webnovels und speichere die Daten zusammen mit Kategorien und Tags in einer Datenbank.
Dazu baue ich eine PWA zum Offline-Lesen, die den Lesefortschritt über mehrere Werke hinweg verfolgt und es ermöglicht, mehrere Versionen derselben Geschichte aufzubewahren, etwa Webnovel und veröffentlichte EPUB-Fassung.
Calibre unterstützt enorm viele Sites.
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
Vor einiger Zeit habe ich ein ähnliches Kindle-send[0] gebaut, um Blogs an den Kindle zu schicken; intern nutzt es readability.
Inzwischen verwende ich es, um Blogs, Bücher und gelegentlich auch komplette Website-Archive zu verschicken, und es lässt sich auch aus Skripten nutzen.
Da sich Kindle-Highlights nach Obsidian exportieren lassen, hat das Erzeugen solcher EPUBs den Vorteil, dass man seine Highlights an einem Ort sammeln kann.
Der Name ist zwar kindle-send, aber es kann an jeden E-Book-Reader senden, der E-Mail als Übertragungsweg für Bücher nutzt.
[0] https://github.com/nikhil1raghav/kindle-send
Ich habe einmal etwas Ähnliches für das Unix-Terminal gebaut, für Webseiten, Gopher und Gemini: Offpunk
https://sr.ht/~lioploum/offpunk/
Statt EPUB speichert es Gopher als Textdateien, Gemini als Gemini-Dateien und Webseiten als HTML+Bild im Cache.
Unter
~/.cache/offpunkkann man die Hierarchie ansehen oder sie direkt in Offpunk besuchen.Mit der Funktion
tourliest man statt Doomscrolling im Textmodus alle Beiträge der Reihe nach bis zum Ende.Es gibt einige Tools, die Epublifier ähneln.
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Sauber.
Ich hatte früher eine einfache Version dieses Konzepts gebaut, die EPUB-Dateien im Dateisystem des Servers speicherte und sie dann mit meinem E-Book-Reader synchronisierte.
https://github.com/solarkraft/webpub
Die zentrale Zutat ist der Postlight Parser, der Websites in eine vereinfachte „Dokument“-Ansicht umwandelt.
Unterstützt es auch http://fanfiction.net/? Für diese Site habe ich keine einfache Lösung gefunden.
Es funktioniert bis zu einem gewissen Grad, aber bei manchen Geschichten klappt es gut, während bei anderen nur die erste Seite abgerufen wird.
Um Inhalte abzurufen, habe ich außer einem Headless Browser keinen gut funktionierenden Ansatz gesehen.