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 .