Problemas ao usar o wget ou o httrack para espelhar o site arquivado

12

Estou tentando usar o wget para criar um espelho local de um site. Mas estou descobrindo que não estou recebendo todas as páginas vinculadas.

Aqui está o site

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

Não quero todas as páginas que começam com web.archive.org, mas quero todas as páginas que começam com http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Quando uso wget -r, na minha estrutura de arquivos, encontro

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

mas não tenho todos os arquivos que fazem parte desse banco de dados, por exemplo

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

Talvez o httrack fosse melhor, mas agora isso é demais.

Então, de que maneira é possível obter uma cópia local de um site arquivado na Internet Archive Wayback Machine?

user695322
fonte
Homem! Tentei espelhar exatamente a mesma página (e realmente fiquei com raiva por não ter feito isso quando o site original ainda estava online, o que teria sido muito mais fácil). Eu acho que um problema é que nem todos os arquivos estão acessíveis no 20110722080716snapshot, portanto a -npopção do wget não ajuda.
Mpy
Você verificou manualmente se as páginas ausentes estão realmente arquivadas? O Archive.org nem sempre arquiva todas as páginas.
Nitro2k01 03/02

Respostas:

20

Embora úteis, as respostas anteriores falham na solução concisa, confiável e repetitiva da questão subjacente. Neste post, detalhamos brevemente as dificuldades de cada uma e, em seguida, oferecemos uma httracksolução modesta .

fundo

Antes de chegarmos a isso, no entanto, considere examinar a resposta bem escrita de mpy . Em seu post tristemente negligenciado, mpy documenta rigorosamente o esquema de arquivamento obscuro (e honestamente ofuscante) da Wayback Machine.

Sem surpresa, não é bonito. Em vez de arquivar sites com segurança em um único diretório, a The Wayback Machine efetivamente distribui um único site por dois ou mais diretórios irmãos identificados numericamente. Dizer que isso complica o espelhamento seria um eufemismo substancial.

Compreender as armadilhas horríveis apresentadas por esse esquema é essencial para entender a inadequação das soluções anteriores. Vamos continuar com isso, vamos?

Solução anterior 1: wget

A pergunta relacionada ao StackOverflow "Recuperar site antigo fora do waybackmachine" é provavelmente o pior infrator nesse aspecto, recomendando o wgetespelhamento do Wayback. Naturalmente, essa recomendação é fundamentalmente doentia.

Na ausência de reescrita complexa de URL externa (por exemplo, Privoxy), wgetnão pode ser usado para espelhar com confiabilidade sites arquivados no Wayback. Como detalhes mpy em "Problema 2 + Solução", qualquer ferramenta de espelhamento que você escolher deve permitir que você baixe de forma não transitória apenas os URLs pertencentes ao site de destino. Por padrão, a maioria das ferramentas de espelhamento faz download de forma transitória de todos os URLs pertencentes ao site de destino e aos sites vinculados a esse site - o que, na pior das hipóteses, significa "toda a Internet".

Um exemplo concreto está em ordem. Ao espelhar o domínio de exemplo kearescue.com, sua ferramenta de espelhamento deve :

  • Inclua todos os URLs correspondentes https://web.archive.org/web/*/http://kearescue.com. Esses são os ativos fornecidos pelo site de destino (por exemplo, https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js).
  • Excluir todos os outros URLs. Esses são os ativos fornecidos por outros sites apenas vinculados a partir do site de destino (por exemplo, https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js).

Deixar de excluir esses URLs normalmente atrai toda ou a maior parte da Internet arquivada no momento em que o site foi arquivado, especialmente para sites que incorporam recursos hospedados externamente (por exemplo, vídeos do YouTube).

Isso seria ruim. Enquanto wget faz fornecer uma linha de comando --exclude-directoriesopção de aceitar um ou mais padrões de URLs correspondentes a serem excluídos, estes são não -uso geral expressões regulares; são globs simplistas cuja *sintaxe corresponde a zero ou mais caracteres, exceto/ . Como os URLs a serem excluídos contêm arbitrariamente muitos /caracteres, wget não podem ser usados ​​para excluir esses URLs e, portanto, não podem ser usados ​​para espelhar sites arquivados no Wayback. Período. Fim da história infeliz.

Esse problema está em registro público desde pelo menos 2009. Ele ainda precisa ser resolvido. Próximo!

Solução anterior 2: Álbum de recortes

Prinz recomenda ScrapBook, um plugin do Firefox. Um plugin do Firefox.

Provavelmente era tudo o que você precisava saber. Enquanto ScrapBook's Filter by String...funcionalidade faz endereço do referido 'Problema 2 + Solução', isso não resolver o subsequente 'Problema 3 + Solução' - ou seja, o problema de duplicados estranhos.

É questionável se ScrapBookaborda adequadamente o problema anterior. Como mpy admite:

Embora o Scrapbook tenha falhado até agora em capturar o site completamente ...

Soluções não confiáveis ​​e excessivamente simplistas não são soluções. Próximo!

Solução anterior 3: wget + Privoxy

mpy , em seguida, fornece uma solução robusta aproveitando ambos wgete Privoxy. Embora wget seja razoavelmente simples de configurar, Privoxyé tudo menos razoável. Ou simples.

Devido ao obstáculo técnico imponderável de instalar, configurar e usar corretamente, Privoxyainda precisamos confirmar a solução da mpy . Ele deve trabalhar de uma forma escalável, robusta. Dadas as barreiras à entrada, essa solução é provavelmente mais apropriada para automação em larga escala do que o webmaster médio que tenta recuperar sites de pequena e média escala.

É wget+ Privoxyvale uma olhada? Absolutamente. Porém, a maioria dos superusuários pode ser melhor atendida por soluções mais simples e facilmente aplicáveis.

Nova solução: httrack

Enter httrack, um utilitário de linha de comando que implementa um superconjunto da wgetfuncionalidade de espelhamento. httracksuporta exclusão de URL baseada em padrão e reestruturação simplista do site. O primeiro resolve o "Problema 2 + Solução" do mpy ; o último, "Problema 3 + Solução".

No exemplo abstrato abaixo, substitua:

  • ${wayback_url}pelo URL do diretório de nível superior que arquiva a totalidade do site de destino (por exemplo, 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • ${domain_name}pelo mesmo nome de domínio presente na ${wayback_url}exclusão do prefixo http://(por exemplo, 'kearescue.com').

Aqui vamos nós. Instale httrack, abra uma janela do terminal cdno diretório local para o qual você deseja baixar o seu site e execute o seguinte comando:

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

Na conclusão, o diretório atual deve conter um subdiretório para cada tipo de arquivo espelhado a partir desse URL. Isso geralmente inclui pelo menos:

  • css, contendo todas as folhas de estilo CSS espelhadas.
  • html, contendo todas as páginas HTML espelhadas.
  • js, contendo todo o JavaScript espelhado.
  • ico, contendo um favicon espelhado.

Como httrackreescreve internamente todo o conteúdo baixado para refletir essa estrutura, seu site deve agora ser navegável como está sem modificações. Se você interrompeu prematuramente o comando acima e gostaria de continuar o download, acrescente a --continueopção ao mesmo comando e tente novamente.

É isso aí. Não são necessárias contorções externas, reescrita de URL propensa a erros ou servidores proxy baseados em regras.

Aproveite, colegas superusuários.

Cecil Curry
fonte
Fico feliz em saber que pelo menos uma pessoa leu minha resposta completamente. E obrigado por sua análise adicional e pela solução httrack. +1
mpy
1
A solução httrack foi perfeita, muito obrigado!
ChrisChinchilla
Fico feliz em ser de pouca ajuda, pessoal. Dado o quão desagradável essa tapeçaria de angústia e engano seria desvendada, eu apenas tive que compartilhar minhas descobertas.
Cecil Curry
Para remover limite de transferência de taxa de adicionar esses parâmetros: --disable-segurança-limite --max-rate = 0
Oswaldo
7

Infelizmente, nenhuma das respostas conseguiu resolver o problema de criar um espelho completo a partir de um site arquivado (sem duplicar todos os arquivos dezenas de vezes). Então, eu cortei outra abordagem. Hacked é a palavra importante, pois minha solução não é uma solução geral nem muito simples (leia: copie e cole). Usei o Privoxy Proxy Server para reescrever os arquivos on-the-fly enquanto espelhava com o wget.

Mas primeiro, o que é tão difícil sobre o espelhamento na Wayback Machine ?

Problema 1 + Solução

A barra de ferramentas Wayback é útil para uso interativo, mas pode interferir no wget. Portanto, livre-se disso com uma regra de filtro privoxy

FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s

Problema 2 + Solução

Eu queria capturar o site inteiro, então precisava de uma profundidade de recursão não muito pequena. Mas não quero que o wget rastreie o servidor inteiro. Geralmente você usa a opção sem pai-np do wget para esse fim. Mas isso não vai funcionar aqui, porque você deseja obter

http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html

mas também

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

(observe o timestamp alterado nos caminhos). A omissão -npacabará sendo rastreada (...)http://cst-www.nrl.navy.mile, finalmente, recuperará o navi.milsite inteiro . Eu definitivamente não quero isso! Portanto, esse filtro tenta emular o -npcomportamento com a máquina Wayback:

FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU

Vou deixar isso como um exercício para cavar a sintaxe. O que este filtro faz é a seguinte: Ele substitui todos os URLs Wayback como http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/com http://some.local.server/404o tempo que eles não contêm http://cst-www.nrl.navy.mil/lattice/.

Você tem que ajustar http://some.local.server/404. Isso é para enviar um erro 404 para o wget. Provavelmente o privoxy pode fazer isso de maneira mais elegante. No entanto, a maneira mais fácil para mim era reescrever o link para uma página inexistente em um servidor http local, então continuei com isso.

E, você também precisa ajustar ambas as ocorrências de http://cst-www.nrl.navy.mil/lattice/para refletir o site que você deseja espelho.

Problema 3 + Solução

E, finalmente, alguma versão arquivada de uma página pode ser vinculada à página em outro instantâneo. E isso para mais um. E assim por diante ... e você terá muitos instantâneos da mesma página - e o wget nunca conseguirá terminar até que ele obtenha todos os instantâneos. Eu realmente não quero isso também! Aqui ajuda muito, que a máquina Wayback é muito inteligente. Você pode solicitar um arquivo

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

mesmo que não esteja incluído no 20110801041529instantâneo. Ele automaticamente o redireciona para o correto:

http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

Portanto, outro filtro privoxy para reescrever todos os instantâneos para o mais recente

FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g

Efetivamente, todos os números de 14 dígitos incluídos /.../são substituídos por 20120713212803(ajuste isso para o instantâneo mais recente do site desejado). Isso pode ser um problema se houver esses números na estrutura do site não originários da máquina Wayback. Não é perfeito, mas é bom para o site Strukturtypen .

O bom disso é que o wget ignora o novo local para o qual é redirecionado e salva o arquivo - no exemplo acima - como web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Usando o wget para espelhar o site arquivado

Então, finalmente, com estes filtros privoxy (definidos em user.filter) habilitado na user.actionvia

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

você pode usar o wget como de costume. Não esqueça de dizer ao wget para usar o proxy:

export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html

Eu usei essas opções, mas também -mdeve funcionar. Você vai acabar com as pastas

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

como a máquina Wayback separa imagens ( im_), folhas de estilo ( cs_) etc., juntei tudo e usei uma mágica sed para substituir os feios links relativos ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) de acordo. Mas isso não é realmente necessário.

mpy
fonte
1
Esta foi uma resposta inestimável. Sua dissecação precisa da estrutura interna do site da The Wayback Machine foi fundamental para a solução baseada em httrack que acabei encontrando. Você é demais, mpy.
Cecil Curry
5

wget

--página-requisitos
Esta opção faz com que o Wget faça o download de todos os arquivos necessários para exibir corretamente uma determinada página HTML. Isso inclui coisas como imagens embutidas, sons e folhas de estilo referenciadas.

Normalmente, ao baixar uma única página HTML, todos os documentos necessários que possam ser necessários para exibi-la corretamente não são baixados. Usar -r junto com -l pode ajudar, mas como o Wget normalmente não faz distinção entre documentos externos e embutidos, geralmente é deixado um "documento em folha" sem seus requisitos.

Por exemplo, digamos que o documento 1.html contenha uma tag "" referenciando 1.gif e uma tag "" apontando para o documento externo 2.html. Digamos que 2.html seja semelhante, mas que sua imagem seja 2.gif e esteja vinculada a 3.html. Digamos que isso continue até um número arbitrariamente alto.

-m
--mirror

Ative as opções adequadas para o espelhamento. Essa opção ativa a recursão e a marcação de tempo, define a profundidade infinita da recursão e mantém as listagens de diretórios FTP. Atualmente, é equivalente a -r -N -l inf --no-remove-Listing.

Observe que o Wget se comportará como se -r tivesse sido especificado, mas apenas essa página e seus requisitos serão baixados. Os links dessa página para documentos externos não serão seguidos. Na verdade, para baixar uma única página e todos os seus requisitos (mesmo que existam em sites separados) e garantir que o lote seja exibido corretamente localmente, esse autor gosta de usar algumas opções além de -p:

wget -E -H -k -K -p http://<site>/<document>

Então wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice , será o seu melhor terno para você. Mas eu recomendo outra ferramenta, uma firefoxextensãoscrapbook

página de recados

O ScrapBook é uma extensão do Firefox, que ajuda a salvar páginas da Web e gerenciar facilmente coleções. Os principais recursos são leveza, velocidade, precisão e suporte multilíngue. Os principais recursos são:
* Salvar página da Web
* Salvar snippet da página da Web
* Salvar site da Web
* Organizar a coleção da mesma maneira que os Favoritos
* Pesquisa de texto completo e pesquisa rápida de filtragem da coleção
* Edição da página da Web coletada
* Texto / HTML recurso de edição semelhante às notas do Opera

Como espelhar um site
Instale o álbum de recortes e reinicie o Firefox

  1. Carregar página no navegador [página da web a ser espelhada]
  2. Clique com o botão direito do mouse na página -> Salvar página como ...
  3. selecione o nível em Salvar em profundidade e pressione salvar insira a descrição da imagem aqui
  4. selecione Restrict to Drirectory/ Domaindo filtro
    insira a descrição da imagem aqui

Aguarde até que o espelhamento seja concluído. Após o espelhamento, você pode acessar o site offline no ScrapBookmenu.

Prinz
fonte
Embora o Scrapbook até agora não tenha conseguido capturar completamente o site, ele estava mais próximo de uma solução possível do que as outras sugestões. Especialmente a opção Filtrar por sequência ... foi mais útil do que filtrar por host / domínio. Daí, eu conceder a graça a você:)
mpy
0

Tenha cuidado com o comando abaixo, porque ele pega muito. O 1 após o 'l' diz para ele pegar todas as páginas de links do site com 1 nível de profundidade. Se você quiser uma alteração mais profunda, altere-o para 2, mas ele nunca poderá terminar porque poderá ficar preso em um loop.

wget -rHpkl 1 -e robots=off http://www.example.com/

Não tenho certeza de quais partes do site você deseja manter e quais não se importam, mas provavelmente você deve colocar uma lista branca e / ou colocar uma lista negra nas diferentes partes do site para obter apenas o que deseja e impedir que você baixando todo o archive.org ou a internet.

Use -D www.examle.com,www.another.example.compara colocar na lista branca apenas os domínios que você deseja ou --exclude-domains www.examle.com,www.another.example.com para colocar na lista negra o que você não deseja.

Michael Yasumoto
fonte
Obrigado, mas o problema com a lista branca / negra é que todos os sites arquivados vêm do web.archive.orghost. Quero espelhar tudo o wget -npque teria espelhado uma vez que o site original ainda estivesse online. -ltambém não ajuda muito, pois precisa ser aumentado para 3 ou 4, resultando em um aumento excessivo na hierarquia do site.
Mpy #
0

O formato dos URLs para o Internet Archive inclui a data e a hora em que o site foi arquivado. Para economizar espaço, os ativos que não foram alterados são vinculados a uma versão anterior de um site.

Por exemplo, neste URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/, a data em que o site foi rastreado era 29 de fevereiro de 2000 às 12:33 e 40 segundos.

Portanto, para obter tudo o que http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/você precisa, comece por isso, mas também pegue todos os ativos vinculados http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Brian
fonte
Exatamente, e esse é o problema. Digamos que a página A esteja vinculada a B. Portanto, a versão atual A está vinculada à versão antiga B. Mas B também inclui um link para A. Portanto, a versão antiga de A também é recuperada e se vincula novamente à versão anterior. Isso (a uma profundidade de rastreamento (necessária) de 4) leva ao resultado: você termina com dezenas de versões da página de índice, mas nem todos os arquivos necessários.
Mpy
0

Já existe uma ferramenta que faz isso melhor:

wayback_machine_downloader domain.org 

Para obtê-lo, você precisa ter o ruby ​​instalado. E depois:

gem install wayback_machine_downloader
Eduard Florinescu
fonte