Arquivamento de sites

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 .

Source: https://habr.com/ru/post/pt431222/


All Articles