Epublifier - Outil de scraping de pages (livres, manuels) pour la lecture hors ligne
(github.com/maoserr)- Epublifier est une extension de navigateur qui extrait une liste de pages HTML d’un site web, les compile en livre ePub et permet à l’utilisateur de l’emporter sur l’eReader de son choix
- Les utilisateurs avancés capables d’écrire du JavaScript peuvent ajouter des définitions de parseur afin de personnaliser la manière dont certains sites sont analysés
- Sont pris en charge : Novel Update, Wuxia World, de nombreux sites de awesome-read-the-docs, des sites personnalisés basés sur une table des matières en UL/OL, sur des expressions régulières appliquées au texte des liens ou sur un query selector, ainsi que des webapps personnalisées avec un élément de titre et un bouton Next
- Comme il s’exécute dans le navigateur, il peut traiter des pages sur des sites qui génèrent ou récupèrent dynamiquement du texte avec JavaScript, et propose un scraping via interface UI permettant de sélectionner les éléments clés à la souris
- Il n’a pas vocation à servir de tâche de fond récurrente ni de scraper dédié robuste, et sur les sites déjà bien pris en charge par d’autres programmes, il est difficile d’en attendre de meilleures performances qu’un outil disposant d’un réglage dédié
Ce que fait Epublifier
- Epublifier est un outil de conversion de sites web en ePub
- Il extrait une liste de pages HTML d’un site web, les compile en livre ePub et permet à l’utilisateur de l’importer sur l’eReader de son choix
- Les utilisateurs capables d’écrire du JavaScript peuvent ajouter des définitions de parseur supplémentaires pour personnaliser l’analyse de n’importe quel site
- Le mode d’emploi est disponible sur le wiki
Sites et structures de pages pris en charge
- Les éléments actuellement pris en charge sont les suivants
-
Novel Update
-
Wuxia World
- De nombreux sites inclus dans awesome-read-the-docs
- Des sites personnalisés qui utilisent des éléments UL/OL comme table des matières
- Des sites personnalisés utilisant des expressions régulières sur le texte des liens ou un query selector
- Des webapps personnalisées avec un élément de titre (header) prédéfini et un bouton Next cliquable
-
Installation
- L’extension Firefox peut être installée depuis Firefox Add-ons
- L’extension Chrome peut être installée depuis le Chrome Web Store
Exemples d’utilisation
- Il existe un exemple d’extraction d’une liste de pages sur Novel Update
- Il existe un exemple de parcours d’une webapp en suivant le bouton Next sur Wuxia World
- Il existe un exemple d’extraction de documentation sur d’autres sites de documentation comme celle de FastAPI
Pourquoi en faire une extension de navigateur
- Cet outil a été conçu pour la génération ponctuelle d’ePub sur des sites web qui se prêtent mal au scraping avec des scripts CLI traditionnels basés sur des requêtes ou avec certaines extensions Chrome qui récupèrent le contenu à partir d’onglets ou fenêtres ouverts
- Les scrapers CLI existants ou les autres extensions sont généralement adaptés à des sites prédéfinis et peuvent ne pas convenir aux sites qui sortent de ce cadre
- Certains outils demandent une quantité non négligeable de configuration ou d’écriture de code
- Certains sites génèrent ou récupèrent dynamiquement le texte avec JavaScript, ce qui impose que le navigateur exécute JavaScript
- C’était le principal manque auquel Epublifier voulait répondre
- Comme il s’exécute dans le navigateur, il est aussi potentiellement moins susceptible d’être détecté ou bloqué
Usage visé et limites
- Epublifier n’est pas un outil destiné à servir de scraper robuste ni de tâche planifiée en arrière-plan exécutée de façon répétée
- Le fait de sélectionner via l’UI les éléments clés à scraper correspond aussi à cette manière de l’utiliser
- L’objectif est la polyvalence, afin de pouvoir récupérer du contenu relativement facilement, en quelques clics de souris, même sans configuration spécifique au site
- Si un site est déjà bien pris en charge par un autre programme ou une autre extension, ces outils étant configurés pour ce site, Epublifier ne fonctionnera pas nécessairement mieux
- Il s’adresse aux cas où l’on veut scraper un site une ou deux fois sans passer beaucoup de temps à coder ou à configurer
Build
- L’environnement de build est Windows 10 avec NPM 8.1.2
- La procédure de build est la suivante
- Installer NPM
- Exécuter
npm installdans le répertoire de base - Exécuter
npm run build_ffpour Firefox - Exécuter
npm run buildpour Chrome
Composants utilisés
- La génération d’ePub s’appuie sur jEpub
1 commentaires
Avis sur Hacker News
Ce qui distingue cette extension des autres scrapers, c’est qu’elle sert à générer ponctuellement un EPUB à partir de sites difficiles à scraper avec les outils traditionnels.
En général, les scrapers en ligne de commande ou les autres extensions prennent en charge une liste prédéfinie de sites, ou demandent pas mal de configuration ou de code.
Par ailleurs, certains sites génèrent ou récupèrent dynamiquement le corps du texte en JavaScript, ce qui oblige le navigateur à exécuter lui-même JavaScript : c’était le plus gros angle mort.
Comme l’outil s’exécute dans le navigateur, il peut aussi être moins susceptible d’être détecté ou bloqué.
Il n’est pas conçu pour être utilisé de manière robuste comme une tâche planifiée récurrente en arrière-plan ; c’est pourquoi il propose une UI pour sélectionner les éléments essentiels à récupérer.
L’objectif est de perdre moins de temps à scraper une ou deux fois un site en quelques clics, sans configuration spécifique au site ; si un autre programme ou une autre extension gère déjà bien le site, cette autre solution sera probablement préférable.
Je l’ai créé parce que je n’ai pas tendance à rester longtemps sur le même site.
Pour avoir moi-même construit quelque chose de similaire, ce qui est intéressant dans cet outil, c’est l’UI qui permet d’ajuster de façon itérative l’extraction de contenu sur des sites arbitraires.
Le fait de pouvoir piloter tout le processus d’extraction via une GUI le rend bien plus flexible que les approches habituelles.
Ce serait vraiment chouette s’il pouvait aussi gérer les sites où toutes les sections sont cachées derrière une UI en accordéon qu’il faut déplier, et où ouvrir une section replie les autres.
En ce moment, je construis moi aussi quelque chose de très similaire.
Je crée un scraper web et un parseur EPUB pour les blogs et surtout les web novels, et je stocke les données dans une base avec catégories et tags.
Je développe aussi une PWA de lecture hors ligne qui permet de suivre la progression de lecture sur plusieurs œuvres, et de conserver plusieurs versions d’une même histoire, par exemple le web novel et l’EPUB publié.
Calibre prend en charge énormément de sites.
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
J’avais autrefois créé quelque chose de similaire, Kindle-send[0], pour envoyer des blogs vers Kindle ; en interne, il utilise readability.
Aujourd’hui, je l’utilise pour envoyer des blogs, des livres, et parfois même des archives complètes de sites web, et il peut aussi être utilisé dans des scripts.
Comme il est possible d’exporter les surlignages Kindle vers Obsidian, créer ce type d’EPUB présente l’avantage de pouvoir regrouper ses surlignages au même endroit.
Le nom est kindle-send, mais il peut envoyer vers n’importe quelle liseuse qui utilise l’e-mail comme méthode d’envoi de livres.
[0] https://github.com/nikhil1raghav/kindle-send
J’avais créé quelque chose de similaire pour le terminal Unix, ciblant les pages web, Gopher et Gemini : Offpunk.
https://sr.ht/~lioploum/offpunk/
Au lieu d’EPUB, il met en cache Gopher sous forme de fichiers texte, Gemini sous forme de fichiers Gemini, et les pages web en HTML + images.
On peut consulter l’arborescence dans
~/.cache/offpunkou y accéder directement depuis Offpunk.Avec la fonction
tour, au lieu de doomscroller, on lit tous les articles jusqu’au bout, dans l’ordre, en mode texte.Il existe quelques outils similaires à Epublifier.
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Propre.
J’avais autrefois créé une version simple de ce concept, qui enregistrait des fichiers EPUB sur le système de fichiers du serveur, puis les synchronisait avec ma liseuse.
https://github.com/solarkraft/webpub
L’ingrédient principal est Postlight Parser, qui transforme les sites web en une vue « document » simplifiée.
Est-ce que http://fanfiction.net/ est aussi pris en charge ? Je n’ai pas trouvé de solution simple pour ce site.
Elle fonctionne dans une certaine mesure, mais certaines histoires passent bien tandis que d’autres ne récupèrent que la première page.
Pour récupérer le contenu, je n’ai pas vu d’approche qui fonctionne vraiment en dehors de l’utilisation d’un navigateur headless.