Recentemente, mergulhei profundamente no tópico de arquivamento de sites. Perguntaram-me por amigos que tinham medo de perder o controle de seu trabalho na Internet devido a má administração do sistema ou exclusão hostil. Tais ameaças tornam o arquivamento de sites uma ferramenta importante para qualquer administrador de sistema. Como se viu, alguns sites são muito mais difíceis de arquivar do que outros. Este artigo demonstra o processo de arquivamento de sites tradicionais e mostra como ele não funciona em aplicativos modernos de página única que abanam a web moderna.
Converter sites simples
Há muito tempo que os sites eram escritos manualmente em HTML. Agora eles são dinâmicos e criados dinamicamente, usando os mais recentes frameworks JavaScript, PHP ou Python. Como resultado, os sites se tornaram mais frágeis: falhas no banco de dados, atualizações falsas ou vulnerabilidades podem levar à perda de dados. Na minha vida anterior como desenvolvedor web, tive que aceitar o pensamento: os clientes esperam que os sites funcionem para sempre. Essa expectativa não se encaixa bem com o princípio do desenvolvimento web "mova-se rápido e quebre as coisas". Trabalhar com o sistema de gerenciamento de conteúdo
Drupal provou ser especialmente difícil nesse sentido, pois grandes atualizações violam intencionalmente a compatibilidade com módulos de terceiros, o que implica um processo de atualização caro que os clientes raramente podem pagar. A solução foi arquivar esses sites: criar um site dinâmico e animado - e transformá-lo em arquivos HTML simples que qualquer servidor da Web pode fornecer para sempre. Esse processo é útil para seus próprios sites dinâmicos, bem como para sites de terceiros que estão fora de seu controle e que você deseja proteger.
Sites simples ou estáticos são tratados pelo venerável
Wget . Embora você precise de um feitiço real para espelhar todo o site:
$ nice wget --mirror --execute robots=off --no-verbose --convert-links \ --backup-converted --page-requisites --adjust-extension \ --base=./ --directory-prefix=./ --span-hosts \ --domains=www.example.com,example.com http://www.example.com/
Este comando carrega o conteúdo da página da web e também rastreia todos os links nos domínios especificados. Antes de iniciar esta ação no seu site favorito, considere as possíveis consequências do rastreamento. O comando acima ignora intencionalmente as regras
robots.txt , como é
habitual para arquivistas , e baixa o site na velocidade máxima. A maioria dos rastreadores tem opções para pausar entre chamadas e limites de largura de banda para não criar carga excessiva no site de destino.
Este comando também recebe "detalhes da página", isto é, folhas de estilo (CSS), imagens e scripts. O conteúdo carregado da página é alterado para que os links apontem para uma cópia local. O conjunto de arquivos resultante pode ser hospedado em qualquer servidor da web, representando uma cópia estática do site original.
Mas é aí que tudo vai bem. Quem já trabalhou com um computador sabe que as coisas raramente vão de acordo com o plano: existem muitas maneiras interessantes de interromper o procedimento. Por exemplo, há algum tempo atrás estava na moda colocar blocos com um calendário nos sites. O CMS irá gerá-los em tempo real e enviar os rastreadores para um ciclo interminável, tentando obter mais e mais novas páginas. Arquivistas complicados podem usar expressões regulares (por exemplo, o Wget tem a opção
--reject-regex
) para ignorar recursos problemáticos. Outra opção: se a interface de administração do site estiver disponível, desative calendários, formulários de login, formulários de comentários e outras áreas dinâmicas. Assim que o site se tornar estático, eles deixarão de funcionar de qualquer maneira; portanto, faz sentido remover essa bagunça do site original.
Pesadelo JavaScript
Infelizmente, alguns sites são muito mais do que apenas HTML. Por exemplo, em sites de página única, o próprio navegador da Web cria conteúdo executando um pequeno programa JavaScript. Um agente de usuário simples como o Wget tentará, sem êxito, restaurar uma cópia estática significativa desses sites, porque não suporta JavaScript. Teoricamente, os sites devem oferecer suporte à
melhoria progressiva para que o conteúdo e a funcionalidade sejam acessíveis sem JavaScript, mas essas diretivas raramente são seguidas, como qualquer pessoa que use plug-ins como
NoScript ou
uMatrix confirmará .
Os métodos tradicionais de arquivamento às vezes falham da maneira mais estúpida. Quando tentei fazer backup de um
jornal local, descobri que o WordPress adiciona cadeias de consulta (por exemplo
?ver=1.12.4
) no final da inclusão. Isso é confuso para detectar o tipo de conteúdo nos servidores Web que atendem ao arquivo morto, porque eles dependem da extensão do arquivo para produzir o cabeçalho correto
Content-Type
. Quando esse arquivo é baixado no navegador, ele não pode carregar scripts, o que interrompe sites dinâmicos.
À medida que o navegador se torna gradualmente uma máquina virtual para executar código arbitrário, os métodos de arquivamento baseados em análise HTML pura devem ser adaptados. A solução para esses problemas é registrar (e reproduzir) os cabeçalhos HTTP entregues pelo servidor durante o rastreamento, e os arquivistas verdadeiramente profissionais usam essa abordagem.
Criando e exibindo arquivos WARC
No
arquivo da
Internet, Brewster Calais e Mike Burner desenvolveram o formato
ARC (ARChive) em 1996: uma maneira de combinar milhões de pequenos arquivos criados durante o arquivamento. No final, o formato foi padronizado como
uma especificação WARC (Web ARChive), lançado como um padrão ISO em 2009 e revisado em 2017. Esforços de padronização liderados pelo
International Conservation Consortium (IIPC). Segundo a Wikipedia, é "uma organização internacional de bibliotecas e outras organizações criadas para coordenar esforços para preservar o conteúdo da Internet para o futuro" e inclui membros como a Biblioteca do Congresso e o Internet Archive. Este último usa o formato WARC em seu
rastreador Java Heritrix.
Um arquivo WARC combina vários recursos em um archive compactado, como cabeçalhos HTTP, conteúdo do arquivo e outros metadados. Convenientemente, esse formato também é suportado pelo rastreador Wget com a
--warc
. Infelizmente, os navegadores não podem exibir diretamente os arquivos WARC; portanto, é necessário um visualizador especial para acessar o arquivo morto. Ou você tem que convertê-lo. O visualizador mais simples que encontrei é o
pywb , um pacote Python. Ele lança um servidor web simples com uma interface como a Wayback Machine para visualizar o conteúdo dos arquivos WARC. O seguinte conjunto de comandos mapeará o arquivo WARC para
http://localhost:8080/
:
$ pip install pywb $ wb-manager init example $ wb-manager add example crawl.warc.gz $ wayback
A propósito, os desenvolvedores do serviço
Webrecorder criaram essa ferramenta, que salva o conteúdo dinâmico da página usando um navegador.
Infelizmente, o pywb não pode carregar arquivos WARC gerados pelo Wget porque
obedece aos requisitos incorretos da especificação WARC 1.0 , que foram
corrigidos na versão 1.1 . Até o Wget ou o pywb resolverem esses problemas, os arquivos WARC criados pelo Wget não são confiáveis o suficiente, então eu pessoalmente comecei a procurar outras alternativas. Minha atenção foi atraída para o rastreador sob o simples nome
crawl . Aqui está como começa:
$ crawl https://example.com/
O programa suporta alguns parâmetros de linha de comando, mas a maioria dos valores padrão é bastante funcional: baixa recursos como CSS e imagens de outros domínios (se o
-exclude-related
à
-exclude-related
não for especificado), mas a recursão não irá além do host especificado. Por padrão, dez conexões simultâneas são iniciadas: esse parâmetro é alterado com o sinalizador
-c
. Mas o mais importante é que os arquivos WARC resultantes são carregados corretamente em pywb.
Trabalho futuro e alternativas
Existem muitos
recursos para usar arquivos WARC. Em particular, existe um Wget substituto chamado
Wpull , projetado especificamente para arquivar sites. Possui suporte experimental para o
PhantomJS e integração com o
youtube-dl , que permitirá baixar sites JavaScript mais complexos e baixar mídia de streaming, respectivamente. O programa é a base da
ferramenta de arquivamento
ArchiveBot , que está sendo desenvolvida pela "equipe gratuita de arquivistas, programadores, escritores e
oradores maliciosos " do
ArchiveTeam, na tentativa de "salvar a história antes que ela desapareça para sempre". Parece que a integração com o PhantomJS não é tão boa quanto gostaríamos, então o ArchiveTeam usa várias outras ferramentas para espelhar sites mais complexos. Por exemplo,
snscrape verifica perfis de mídia social e gera listas de páginas para enviar ao ArchiveBot. Outra ferramenta é o
crocoite , que executa o Chrome no modo decapitado para arquivar sites com muito JavaScript.
Este artigo ficaria incompleto sem mencionar os "sites Xerox" do
HTTrack . Como o Wget, o programa HTTrack cria cópias locais de sites, mas, infelizmente, não suporta salvar no WARC. Recursos interativos podem ser mais interessantes para usuários iniciantes não familiarizados com a linha de comando.
Na mesma linha, durante minha pesquisa, encontrei uma alternativa ao Wget, chamada
Wget2, com suporte para trabalhos multithread, o que acelera o programa. No entanto,
alguns recursos do Wget estão ausentes aqui, incluindo modelos, salvando no suporte a WARC e FTP, mas foram adicionados suporte a RSS, cache de DNS e suporte a TLS aprimorado.
Finalmente, meu sonho pessoal de tais ferramentas seria integrá-las ao meu sistema de favoritos existente. Atualmente, armazeno links interessantes no
Wallabag , um serviço de armazenamento local para páginas interessantes, desenvolvido como uma alternativa ao programa
Pocket gratuito (agora de propriedade da Mozilla). Mas o Wallabag, em seu design, cria apenas uma versão “legível” do artigo, em vez de uma cópia completa. Em alguns casos, a "versão legível" é realmente
ilegível e o Wallabag às vezes
não consegue lidar com a análise . Em vez disso, outras ferramentas, como
arquivador de marcadores ou
reminescência , salvam uma captura de tela da página junto com HTML completo, mas, infelizmente, não suportam o formato WARC, o que proporcionaria uma reprodução ainda mais precisa.
A triste verdade do meu espelhamento e arquivamento é que os dados estão morrendo. Felizmente, arquivistas amadores têm à disposição as ferramentas para salvar conteúdo interessante na Internet. Para aqueles que não desejam fazer isso sozinhos, há um arquivo da Internet, bem como o grupo ArchiveTeam, que está
trabalhando para criar uma cópia de backup do arquivo da Internet .