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 com links.
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 eu uso wget -r
, na minha estrutura de arquivos eu 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 deste banco de dados, por exemplo
web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.
Talvez o httrack fizesse melhor, mas no momento isso é demais.
Então, por que meios é possível obter uma cópia local de um site arquivado noMáquina Wayback de arquivo da Internet?
Responder1
Embora úteis, as respostas anteriores não conseguem resolver a questão subjacente de forma concisa, confiável e repetida. Neste post, detalhamos brevemente as dificuldades de cada um e depois oferecemos uma httrack
solução modesta.
Fundo
Antes de chegarmos a isso, no entanto, considere lermpyresposta bem escrita. Em sua postagem tristemente negligenciada,mpydocumenta rigorosamente o esquema de arquivamento obscuro (e honestamente ofuscatório) da Wayback Machine.
Não é novidade que não é bonito.Em vez de arquivar sites de maneira sensata em um único diretório, a Wayback Machine espalha efêmeramente um único site em dois ou mais diretórios irmãos numericamente identificados. Dizer que isso complica o espelhamento seria um eufemismo substancial.
Compreender as horríveis armadilhas apresentadas por este esquema é fundamental para compreender a inadequação das soluções anteriores. Vamos em frente, certo?
Solução anterior 1: wget
A questão StackOverflow relacionada"Recuperar site antigo do Waybackmachine"é provavelmente o pior infrator nesse aspecto, recomendando wget
o espelhamento do Wayback. Naturalmente, essa recomendação é fundamentalmente errada.
Na ausência de reescrita complexa de URL externa (por exemplo, Privoxy
),wget
não pode ser usado para espelhar de forma confiável sites arquivados pelo Wayback.Comompydetalhes em "Problema 2 + Solução", qualquer ferramenta de espelhamento que você escolher deve permitir o download não transitivoapenasURLs pertencentes ao site de destino. Por padrão, a maioria das ferramentas de espelhamento baixam transitivamentetodosURLs 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 é necessário. Ao espelhar o domínio de exemplo kearescue.com
, sua ferramenta de espelhamentodeve:
- Inclui todos os URLs correspondentes
https://web.archive.org/web/*/http://kearescue.com
. Estes são ativos fornecidos pelo site de destino (por exemplo,https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js
). - Exclua todos os outros URLs. Estes são ativos fornecidos por outros sites meramente vinculados ao site de destino (por exemplo,
https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js
).
A falha na exclusão de tais URLs normalmente extrai toda ou a maior parte da Internet arquivada no momento em que o site foi arquivado, especialmente para sites que incorporam ativos hospedados externamente (por exemplo, vídeos do YouTube).
Isso seria ruim.Enquantowget
fazfornecer uma --exclude-directories
opção de linha de comando aceitando a exclusão de um ou mais padrões que correspondam a URLs, estes sãonãoexpressões regulares de uso geral; são globos simplistas cuja *
sintaxe corresponde a zero ou mais caracteresexcluindo/
. Como os URLs a serem excluídos contêm muitos /
caracteres arbitrários,wget
não podeser usado para excluir esses URLs e, portanto,não podeser usado para espelhar sites arquivados pelo Wayback.Período.Fim da história infeliz.
Esta questão tem estadoregistro públicodesde pelo menos 2009. Ainda não foi resolvido.Próximo!
Solução anterior 2: álbum de recortes
Prínciperecomenda ScrapBook
, um plugin do Firefox.Um plug-in do Firefox.
Provavelmente isso era tudo que você precisava saber. Enquanto ScrapBook
a Filter by String...
funcionalidadefazabordar o mencionado "Problema 2 + Solução", ele nãonãoabordar o subsequente "Problema 3 + Solução" - nomeadamente, o problema das duplicatas estranhas.
É questionável se ScrapBook
o problema anterior é abordado de forma adequada. Comompyadmite:
Embora o Scrapbook não tenha conseguido até agora conquistar o site completamente...
Soluções não confiáveis e excessivamente simplistas são não-soluções. Próximo!
Solução anterior 3: wget + Privoxy
mpyem seguida, fornece uma solução robusta que aproveita ambos wget
e Privoxy
. Enquantowget
érazoavelmente simples de configurar, Privoxy
é tudo menos razoável. Ou simples.
Devido ao imponderável obstáculo técnico de instalar, configurar e usar corretamente o Privoxy
, ainda não confirmamosmpya solução. Istodevetrabalhar de maneira escalonável e robusta. Dadas as barreiras de entrada, esta solução é provavelmente mais apropriada para automação em grande escala do que o webmaster médio que tenta recuperar sites de pequena e média escala.
Vale a wget
pena Privoxy
dar uma olhada?Absolutamente.Mas a maioria dos superusuários pode ser melhor atendida por soluções mais simples e mais facilmente aplicáveis.
Nova solução: httrack
Enter httrack
, um utilitário de linha de comando que implementa um superconjunto de wget
funcionalidades de espelhamento de. httrack
suporta exclusão de URL baseada em padrãoereestruturação simplista do site. O primeiro resolvempy'Problema 2 + Solução'; o último, “Problema 3 + Solução”.
No exemplo abstrato abaixo, substitua:
${wayback_url}
pela URL do diretório de nível superior que arquiva todo o 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 prefixohttp://
(por exemplo,'kearescue.com'
).
Aqui vamos nós.Instale httrack
, abra uma janela de terminal cd
no diretório local para o qual deseja que seu site seja baixado 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
Após a conclusão, o diretório atual deverá conter um subdiretório para cada tipo de arquivo espelhado dessa 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 httrack
reescreve internamente todo o conteúdo baixado para refletir essa estrutura, seu site agora deve ser navegável como está, sem modificações. Se você interrompeu prematuramente o comando acima e deseja continuar o download, anexe a --continue
opção exatamente ao mesmo comando e tente novamente.
É isso.Não são necessárias contorções externas, reescrita de URL propensa a erros ou servidores proxy baseados em regras.
Aproveitem, colegas superusuários.
Responder2
Infelizmente nenhuma das respostas foi capaz de resolver o problema de fazer um espelho completo de um site arquivado (sem duplicar cada arquivo dezenas de vezes). Então, criei outra abordagem.Hackeadoé a palavra importante, pois minha solução não é uma solução geral nem muito simples (leia-se: copiar e colar). Eu usei oServidor proxy Privoxypara reescrever os arquivosno vôoenquanto espelha com wget.
Mas primeiro, o que há de tão difícil em espelhar a partir doMáquina Wayback?
Problema 1 + Solução
A barra de ferramentas Wayback é útil para uso interativo, mas pode interferir no wget. Então 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 todo o servidor. Geralmente você usa osem paiopção -np
de wget para esse fim. Mas isso não vai funcionar aqui, porque você quer conseguir
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 carimbo de data/hora alterado nos caminhos). A omissão -np
fará com que o wget rasteje até (...)http://cst-www.nrl.navy.mil
e, finalmente, recupere todo o navi.mil
site. Eu definitivamente não quero isso! Portanto, este filtro tenta emular o -np
comportamento da 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 aprofundar a sintaxe. O que este filtro faz é o seguinte: ele substitui todos os URLs Wayback, http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/
desde http://some.local.server/404
que o façamnãocontém http://cst-www.nrl.navy.mil/lattice/
.
Você tem que se ajustar http://some.local.server/404
. Isso é para enviar um erro 404 para o wget. Provavelmente o privoxy pode fazer isso de forma mais elegante. No entanto, a maneira mais fácil para mim foi reescrever o link para uma página inexistente em um servidor http local, então continuei com isso.
E você também precisa ajustarambas as ocorrênciasde http://cst-www.nrl.navy.mil/lattice/
para refletir o site que você deseja espelhar.
Problema 3 + Solução
E, finalmente, alguma versão arquivada de uma página pode vincular-se à página em outro instantâneo. E isso para mais um. E assim por diante... e você acabará com vários instantâneos da mesma página - e o wget nunca conseguirá terminar até que seja obtidotodosinstantâneos. Eu realmente não quero isso também! Aqui ajuda muito, que a máquina Wayback seja 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 20110801041529
instantâneo. Istoautomaticamenteredirecioná-lo para o correto:
http://web.archive.org/web/20110731225728/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
Então, 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, cada número de 14 dígitos incluído /.../
é substituído por 20120713212803
(ajuste para o instantâneo mais recente do site desejado). Isso pode ser um problema se esses números na estrutura do site não forem originários da máquina Wayback. Não é perfeito, mas bom para oEstruturasite.
O bom disso é que o wget ignora o novo local para o qual foi 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 wget para espelhar site arquivado
Então, finalmente com esses filtros privoxy (definidos em user.filter
) habilitados user.action
via
{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org
você pode usar o wget normalmente. Não se 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
Usei essas opções, mas -m
também devem funcionar. Você vai acabar com as pastas
20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_
já que a máquina Wayback separa imagens ( im_
), folhas de estilo ( cs_
) etc. Mesclei tudo e usei um pouco de magia sed para substituir os links relativos feios ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice
) de acordo. Mas isso não é realmente necessário.
Responder3
wget
--page-requisites
Esta opção faz com que o Wget baixe 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, quaisquer 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 distingue entre documentos externos e embutidos, geralmente ficam com "documentos folha" que não possuem seus requisitos.
Por exemplo, digamos que o documento 1.html contém 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 espelhamento. Esta opção ativa a recursão e o carimbo de data/hora, define a profundidade infinita da recursão e mantém 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 aquela página e seus requisitos serão baixados. 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, este 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 firefox
extensãoscrapbook
página de recados
ScrapBook é uma extensão do Firefox que ajuda você a salvar páginas da Web e gerenciar coleções facilmente. Os principais recursos são leveza, velocidade, precisão e suporte multilíngue. Os principais recursos são:
* Salvar página da Web
* Salvar trecho da página da Web
* Salvar site
* Organize a coleção da mesma forma 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
Instalarpágina de recados e reinicie o Firefox
- Carregar página no navegador [página da web a ser espelhada]
- Clique com o botão direito na página -> Salvar página como ...
- selecione o nível deSalvar em profundidade e pressione salvar
- selecione
Restrict to Drirectory
deDomain
Filtro
Aguarde a conclusão do espelhamento. Após o espelhamento, você pode acessar o site offline no ScrapBook
menu.
Responder4
O formato dos URLs do Internet Archive inclui a data e 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 URLhttp://web.archive.org/web/20000229123340/http://www.yahoo.com/a data em que o site foi rastreado foi 29 de fevereiro de 2000 às 12h33 e 40 segundos.
Portanto, para obter tudo, http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
você precisa começar por aí, mas também obter todos os ativos vinculados de http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/
.