Epublifier - ferramenta para extrair páginas (livros, manuais) para leitura offline
(github.com/maoserr)- Epublifier é uma extensão de navegador que extrai uma lista de páginas HTML de um site, compila tudo em um livro ePub e permite levá-lo para o eReader escolhido pelo usuário
- Usuários avançados que sabem escrever JavaScript podem adicionar definições de parser para personalizar a forma de parsing de sites específicos
- O suporte inclui Novel Update, Wuxia World, muitos sites de awesome-read-the-docs, sites personalizados baseados em sumários UL/OL, regex para texto de links ou query selectors, e webapps personalizados com elemento de título e botão Next
- Por rodar dentro do navegador, consegue processar páginas mesmo em sites que geram ou carregam texto dinamicamente via JavaScript, e oferece scraping baseado em UI, no qual os elementos principais são selecionados com cliques do mouse
- Não tem como objetivo ser uma tarefa de background recorrente nem um scraper dedicado e robusto; em sites que outros programas já tratam bem, é difícil esperar desempenho melhor do que ferramentas com configuração específica
O que o Epublifier faz
- Epublifier é uma ferramenta que converte sites em ePub
- Ele extrai de um site uma lista de páginas HTML e as compila em um livro ePub, para que o usuário possa levá-lo ao eReader que preferir
- Usuários que sabem escrever JavaScript podem adicionar definições de parser para personalizar o parsing de sites arbitrários
- O modo de uso pode ser consultado na wiki
Sites e estruturas de página compatíveis
- Atualmente, há suporte para os seguintes casos
-
Novel Update
-
Wuxia World
- Muitos sites incluídos em awesome-read-the-docs
- Sites personalizados que usam elementos UL/OL como sumário
- Sites personalizados que usam regex sobre o texto de links ou query selectors
- Webapps personalizados com um elemento de título (header) predefinido e um botão Next clicável
-
Instalação
- A extensão para Firefox pode ser instalada em Firefox Add-ons
- A extensão para Chrome pode ser instalada pela Chrome Web Store
Exemplos de uso
- Há um exemplo de extração de lista de páginas no Novel Update
- Há um exemplo de navegação por um webapp seguindo o botão Next no Wuxia World
- Há um exemplo de extração de documentação em outros sites de documentação, como a documentação do FastAPI
Por que foi criada como extensão de navegador
- Esta ferramenta foi feita para gerar ePubs temporários a partir de sites que não são bem extraídos por scripts CLI tradicionais baseados em requisições nem por algumas extensões do Chrome que fazem scraping com base em abas ou janelas abertas
- Scrapers CLI existentes e outras extensões em geral são voltados a sites predefinidos e podem não servir para sites fora desse escopo
- Algumas ferramentas exigem uma quantidade considerável de configuração ou código
- Alguns sites geram ou carregam texto dinamicamente com JavaScript, então o navegador precisa executar JavaScript
- Essa foi a principal lacuna que levou à criação do Epublifier
- Por rodar dentro do navegador, talvez também tenha menor chance de ser detectado ou bloqueado
Modo de uso pretendido e limitações
- O Epublifier não é uma ferramenta para ser usada como scraper robusto nem como tarefa agendada em background executada repetidamente
- A decisão de permitir selecionar na UI os elementos principais a serem extraídos também está ligada a esse modo de uso
- O objetivo é a generalidade: conseguir extrair conteúdo com relativa facilidade, mesmo sem configuração específica por site, usando apenas alguns cliques do mouse
- Se um site já é bem tratado por outro programa ou extensão, essas ferramentas estarão configuradas para aquele site, então o Epublifier não deve funcionar melhor
- Ele é voltado a quem quer extrair um site uma ou duas vezes, sem gastar muito tempo com programação ou configuração
Build
- O ambiente de build é Windows 10 e NPM 8.1.2
- O procedimento de build é o seguinte
- Instalar o NPM
- Executar
npm installno diretório base - Executar
npm run build_ffpara Firefox - Executar
npm run buildpara Chrome
Componentes usados
- A geração de ePub usa jEpub
1 comentários
Comentários do Hacker News
O que diferencia essa extensão de outros scrapers é que ela é uma ferramenta para gerar EPUB temporariamente em sites que scrapers tradicionais não conseguem capturar bem
Normalmente, scrapers de linha de comando ou outras extensões têm sites compatíveis predefinidos, ou exigem bastante configuração e código
Além disso, alguns sites geram ou carregam o conteúdo dinamicamente com JavaScript, então o navegador precisa executar esse JavaScript diretamente, e essa era a maior lacuna
Como roda dentro do navegador, talvez também tenha menos chance de ser detectado ou bloqueado
A ideia não é usar isso de forma robusta como uma tarefa agendada de fundo executada repetidamente, por isso existe uma UI para escolher os elementos principais a serem extraídos
É uma ferramenta para gastar menos tempo capturando algo uma ou duas vezes com alguns cliques do mouse, sem configurações específicas para cada site, e se outro programa ou extensão já lida bem com um site, provavelmente essa opção será melhor
Eu não costumo ficar muito tempo no mesmo site, então fiz isso
Como alguém que já construiu algo parecido, a parte interessante dessa ferramenta é a UI para ajustar repetidamente a extração de conteúdo em sites arbitrários
O fato de todo o processo de extração poder ser tratado por uma GUI torna isso muito mais flexível do que a abordagem comum
Seria muito legal se conseguisse lidar até com sites em que todas as seções ficam atrás de uma UI de acordeão que precisa ser expandida para aparecer, e em que ao abrir uma seção as outras se fecham
Neste momento eu também estou fazendo algo muito parecido
Estou criando um web scraper e um parser de EPUB principalmente para blogs e web novels, e armazenando os dados em um banco de dados junto com categorias e tags
Também estou fazendo um PWA para leitura offline que permite acompanhar o progresso de leitura de várias obras e manter várias versões da mesma história (web novel e EPUB publicado)
O Calibre suporta uma quantidade enorme de sites
https://github.com/JimmXinu/FanFicFare
https://github.com/JimmXinu/FanFicFare/wiki/SupportedSites
No passado fiz algo parecido, o Kindle-send[0], para enviar blogs ao Kindle, e internamente ele usa readability
Hoje eu o uso para enviar blogs, livros e às vezes até arquivos completos de sites, e ele também pode ser usado em scripts
Como dá para exportar os destaques do Kindle para o Obsidian, uma vantagem de criar EPUBs assim é poder reunir os destaques em um só lugar
O nome é kindle-send, mas ele pode enviar para qualquer leitor de e-books que use e-mail como forma de transferência de livros
[0] https://github.com/nikhil1raghav/kindle-send
Já fiz algo parecido para terminal Unix, voltado para páginas web, Gopher e Gemini: Offpunk
https://sr.ht/~lioploum/offpunk/
Em vez de EPUB, ele salva Gopher como arquivo de texto, Gemini como arquivo Gemini e páginas web como HTML+imagens no cache
Dá para ver a estrutura hierárquica em
~/.cache/offpunkou visitar diretamente no OffpunkSe usar o recurso
tour, em vez de doomscrolling você acaba lendo todos os textos em sequência até o fim em modo textoExistem algumas ferramentas parecidas com o Epublifier
https://epub.press/
https://github.com/dteviot/WebToEpub
https://dotepub.com/
Bem elegante
Há algum tempo fiz uma versão simples desse conceito que salvava arquivos EPUB no sistema de arquivos do servidor e os sincronizava com meu leitor de e-books
https://github.com/solarkraft/webpub
O ingrediente principal é o Postlight Parser, que transforma sites em uma visualização simplificada de “documento”
Também suporta http://fanfiction.net/? Não encontrei uma solução fácil para esse site
Funciona até certo ponto, mas algumas histórias vão bem e outras só trazem a primeira página
Para buscar o conteúdo, não vi nenhuma abordagem que funcione bem além de usar um navegador headless