5 pontos por GN⁺ 2024-10-22 | 1 comentários | Compartilhar no WhatsApp
  • 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

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 install no diretório base
    • Executar npm run build_ff para Firefox
    • Executar npm run build para Chrome

Componentes usados

  • A geração de ePub usa jEpub

1 comentários

 
GN⁺ 2024-10-22
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

    • No meu caso funciona neste site: https://docs.ray.io/en/latest/
    • Dá para remover pop-ups como newsletter, assinatura, login e aviso de cookies? Também dá para ler páginas que exigem login?
  • 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/offpunk ou visitar diretamente no Offpunk
    Se usar o recurso tour, em vez de doomscrolling você acaba lendo todos os textos em sequência até o fim em modo texto

  • Existem 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

    • Dá para exportar em EPUB pelo https://fichub.net/
    • Eu uso um plugin do Calibre: https://www.mobileread.com/forums/showthread.php?t=259221
      Funciona até certo ponto, mas algumas histórias vão bem e outras só trazem a primeira página
    • O próprio Fanfiction.net é simples, mas a proteção anti-bot da Cloudflare está ativada de forma agressiva
      Para buscar o conteúdo, não vi nenhuma abordagem que funcione bem além de usar um navegador headless
    • Dá para obter todos os links dos capítulos em CSV, e a estrutura parece ser de simplesmente incrementar os números na URL