Epublifier - herramienta para scrapear páginas (libros, manuales) para lectura offline
(github.com/maoserr)- Epublifier es una extensión de navegador que extrae una lista de páginas HTML de un sitio web, las compila en un libro ePub y permite llevarlo al eReader que el usuario elija
- Los usuarios avanzados que puedan escribir JavaScript pueden agregar definiciones de parser para personalizar cómo se parsea un sitio específico
- Soporta Novel Update, Wuxia World, numerosos sitios de awesome-read-the-docs, sitios personalizados basados en índices UL/OL, regex sobre texto de enlaces o query selectors, y webapps personalizadas con un elemento de título y un botón Next
- Como se ejecuta dentro del navegador, puede procesar páginas incluso en sitios que generan o cargan texto dinámicamente con JavaScript, y ofrece scraping basado en UI para seleccionar elementos clave con clics del mouse
- No está pensado para tareas en segundo plano repetitivas ni como un scraper dedicado y robusto; en sitios que otros programas ya manejan bien, es difícil esperar mejor rendimiento que el de herramientas con configuración específica
Qué hace Epublifier
- Epublifier es una herramienta que convierte sitios web a ePub
- Extrae una lista de páginas HTML de un sitio web y las compila en un libro ePub para que el usuario pueda llevarlo al eReader que prefiera
- Los usuarios que sepan escribir JavaScript pueden agregar definiciones de parser adicionales para personalizar el parseo de sitios arbitrarios
- El uso puede consultarse en la wiki
Sitios y estructuras de página compatibles
- Actualmente soporta lo siguiente
-
Novel Update
-
Wuxia World
- Numerosos sitios incluidos en awesome-read-the-docs
- Sitios personalizados que usan elementos UL/OL como índice
- Sitios personalizados que usan regex sobre texto de enlaces o query selectors
- Webapps personalizadas con un elemento de título (header) predefinido y un botón Next clickeable
-
Instalación
- La extensión para Firefox se puede instalar desde Firefox Add-ons
- La extensión para Chrome se puede instalar desde Chrome Web Store
Ejemplos de uso
- Hay un ejemplo de extracción de lista de páginas en Novel Update
- Hay un ejemplo de recorrido de una webapp siguiendo el botón Next en Wuxia World
- Hay un ejemplo de extracción de documentación en otros sitios de documentación, como la documentación de FastAPI
Por qué se hizo como extensión de navegador
- Esta herramienta está pensada para generar ePub temporales en sitios web que no se scrapean bien con scripts CLI tradicionales basados en requests o con algunas extensiones de Chrome que scrapean en función de pestañas o ventanas abiertas
- Los scrapers CLI existentes y otras extensiones suelen estar adaptados a sitios predefinidos, y pueden no servir para sitios fuera de ese alcance
- Algunas herramientas requieren bastante configuración o escritura de código
- Algunos sitios generan o cargan texto dinámicamente con JavaScript, por lo que el navegador debe ejecutar JavaScript
- Esa fue la principal brecha que motivó la creación de Epublifier
- Al ejecutarse dentro del navegador, también podría tener menos probabilidades de ser detectado o bloqueado
Forma de uso prevista y límites
- Epublifier no es una herramienta pensada para usarse como scraper robusto ni como tarea programada en segundo plano que se ejecute repetidamente
- La decisión de hacer que los elementos clave a scrapear se seleccionen desde la UI también está relacionada con esta forma de uso
- Busca la versatilidad, para poder scrapear con relativa facilidad y con unos pocos clics del mouse, incluso sin configuración específica por sitio
- Si otro programa o extensión ya maneja bien un sitio, esas herramientas están configuradas para ese sitio, por lo que Epublifier no funcionará mejor
- Está orientado a quienes quieren scrapear un sitio una o dos veces sin dedicar mucho tiempo a programar o configurar
Build
- El entorno de build es Windows 10 y NPM 8.1.2
- El procedimiento de build es el siguiente
- Instalar NPM
- Ejecutar
npm installen el directorio base - Ejecutar
npm run build_ffpara Firefox - Ejecutar
npm run buildpara Chrome
Componentes utilizados
- Para la generación de ePub se usa jEpub
1 comentarios
Comentarios de Hacker News
La diferencia de esta extensión frente a otros scrapers es que está pensada para generar EPUBs temporales en sitios que los scrapers tradicionales no extraen bien
Normalmente los scrapers de línea de comandos u otras extensiones tienen una lista de sitios compatibles ya definida, o requieren bastante configuración o código
Además, algunos sitios generan o cargan el contenido dinámicamente con JavaScript, así que el navegador tiene que ejecutar ese JavaScript directamente, y ese era el mayor hueco
Al ejecutarse dentro del navegador, también podría haber menos probabilidad de que la detecten o bloqueen
No está pensada para usarse de forma robusta como una tarea programada en segundo plano que corre repetidamente, y por eso tiene una UI para elegir los elementos clave que se van a extraer
Es una herramienta para perder menos tiempo al extraer una o dos veces con unos cuantos clics, sin configuración específica para cada sitio; si ya hay otros programas o extensiones que manejan bien ese sitio, probablemente sean mejor opción
La hice porque no suelo quedarme mucho tiempo en el mismo sitio
Habiendo hecho algo parecido por mi cuenta, la parte interesante de esta herramienta es la UI para ajustar repetidamente la extracción de contenido en sitios arbitrarios
Poder manejar todo el proceso de extracción desde una GUI completa la hace mucho más flexible que el enfoque habitual
Estaría increíble si pudiera manejar incluso sitios donde todas las secciones están detrás de una UI de acordeón que solo se ve al expandirlas, y al abrir una las demás se colapsan
Ahora mismo yo también estoy haciendo algo muy parecido
Estoy creando un web scraper y un parser de EPUB principalmente para blogs y novelas web, y guardo los datos en una base de datos junto con categorías y etiquetas
También estoy haciendo una PWA para lectura offline que permite seguir el progreso de lectura de varias obras y conservar múltiples versiones de la misma historia (novela web y EPUB publicado)
Calibre soporta una cantidad enorme de sitios
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
Hace tiempo hice algo parecido, Kindle-send[0], para enviar blogs al Kindle, y por dentro usa readability
Ahora lo uso para enviar blogs, libros y a veces archivos completos de sitios web, y también se puede usar desde scripts
Como se pueden exportar los subrayados de Kindle a Obsidian, una ventaja de crear este tipo de EPUB es que puedes reunir los subrayados en un solo lugar
Aunque se llama kindle-send, se puede enviar a cualquier lector electrónico que use correo electrónico como método de transferencia de libros
[0] https://github.com/nikhil1raghav/kindle-send
Hice algo parecido para terminal Unix, orientado a páginas web, Gopher y Gemini: Offpunk
https://sr.ht/~lioploum/offpunk/
En vez de EPUB, guarda Gopher como archivos de texto, Gemini como archivos Gemini y las páginas web como HTML+imágenes en caché
Puedes ver la estructura jerárquica en
~/.cache/offpunko visitar el contenido directamente desde OffpunkSi usas la función
tour, en vez de hacer doomscrolling terminas leyendo todos los textos en orden y hasta el final, en modo textoHay varias herramientas parecidas a Epublifier
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Está limpio
Hace tiempo hice una versión simple de este concepto que guardaba archivos EPUB en el sistema de archivos del servidor y luego los sincronizaba con mi lector electrónico
https://github.com/solarkraft/webpub
El ingrediente clave es Postlight Parser, que convierte sitios web en una vista simplificada de “documento”
¿También soporta http://fanfiction.net/? No he encontrado una solución fácil para ese sitio
Funciona hasta cierto punto, pero algunas historias salen bien y otras solo traen la primera página
No he visto otro enfoque que funcione bien para obtener el contenido aparte de usar un navegador headless