Crie uma cópia local completa de um site usando o Wget

6

OK, aqui está o que eu preciso:

  • Estou no Mac (Mac OS X 10.6.8)
  • Eu quero espelhar completamente um site no meu disco rígido (isso é o que estou usando como teste )
  • Quero todas as imagens e pré-requisitos, para que o site seja navegável quando estiver off-line
  • Eu quero que os links relativos em todas as páginas sejam atualizados de acordo
  • As extensões
  • (* opcional) .html para todos os arquivos seriam ótimas, para que possam ser facilmente reconhecidas e abertas por um navegador

Isso é o que estou usando:

wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/

O problema é:

  • .css arquivos e imagens, etc não parecem ser baixados - pelo menos, até o nível que eu deixei rodando (ok, talvez eles seriam baixados se o processo fosse concluído, então nós pode pular esta aqui)
  • NÃO está sendo adicionada uma extensão html
  • Links não são convertidos

Então ... alguma ideia?

    
por Dr.Kameleon 12.01.2013 / 15:27

2 respostas

3

Primeiro, isso parece ser um problema apenas do OS X. Eu posso usar o comando acima no Ubuntu 14.04 LTS e funciona fora da caixa! Algumas sugestões:

.css files and images, etc do not seem to be downloaded - at least, up to the level I've left running (ok, maybe they would be downloaded if the process was completed, so we may skip this one)

  1. Quando você diz --domains wikispaces.com , você não estará baixando arquivos CSS vinculados localizados em outros domínios. Algumas das folhas de estilo desse site estão localizadas em http://c1.wikicdn.com , como sugere a origem de index.html

  2. Alguns sites não permitem que você acesse seus arquivos vinculados (imagens referenciadas) diretamente usando o link deles (consulte esta página ). Você só pode visualizá-los através do site. Isso não parece ser o caso aqui.

  3. O Wget não parece reconhecer comentários ao analisar o HTML. Eu vejo o seguinte quando o Wget está sendo executado:

--2016-07-01 04:01:12--  http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg
Reusing existing connection to chessprogramming.wikispaces.com:80.
HTTP request sent, awaiting response... 404 Not Found
2016-07-01 04:01:14 ERROR 404: Not Found.

Abrir o link no navegador leva você a uma página de login. O nome do arquivo sugere que ocorreu em algum lugar nos comentários.

  1. Muitos sites não permitem o download usando gerenciadores de downloads, portanto, eles verificam qual cliente originou a solicitação HTTP (que inclui o navegador ou qualquer cliente usado para solicitar um arquivo de seu servidor).

Use -U somebrowser para falsificar o cliente e fingir ser um navegador. Por exemplo, -U mozilla pode ser adicionado para informar ao servidor que um Mozilla / Firefox está solicitando a página. No entanto, este não é o problema aqui, pois posso fazer o download do site sem esse argumento.

  1. A taxa de download e solicitação é importante. Os servidores não querem que seu desempenho seja inchado por robôs que solicitam dados de seu site. Use os argumentos --limit-rate= e --wait= no Wget para limitar a taxa de download e aguarde alguns segundos entre a geração de solicitações get para arquivos individuais.

por exemplo,

wget -r --wait=5 --limit-rate=100K <other arguments>

para aguardar 5 segundos entre obter solicitações e limitar a taxa de download a 100Kbps. Mais uma vez, este não é o problema aqui porque o servidor não me obrigou a limitar a taxa de download para buscar o site.

O caso mais possível aqui é (1). Substitua o --domains wikispaces.com por --domains * e tente novamente. Vamos ver onde nos encontramos. Você deve conseguir buscar pelo menos os arquivos CSS.

NO html extension is being added

A extensão HTML está sendo adicionada quando eu executo o comando.

Links are not converted

Não acho que estou totalmente correto aqui, mas não espere que os links funcionem assim que você espelha um site.

Quando você passa um argumento para a solicitação HTTP get (por exemplo, http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0 tem os argumentos v=rss_2_0 ), a solicitação é tratada com algum script em execução no servidor, por exemplo, PHP. Os argumentos ajudarão você a buscar a versão correta do script, dependendo do (s) argumento (s). Lembre-se, quando você está espelhando um site, especialmente um Wiki, que roda em PHP, você não pode exatamente espelhar um site a menos que você busque os scripts PHP originais. Páginas HTML retornadas por scripts PHP são apenas uma face da página que você pode esperar ver com esse script. O algoritmo correto que gera a página é armazenada no servidor e só será espelhado corretamente se você buscar o arquivo PHP original, o que você não pode fazer com HTTP. Para isso você precisa de acesso FTP ao servidor.

Espero que isso ajude.

    
por 30.06.2016 / 20:18
1

A opção 1 da resposta russa da Soyuz Rocket foi certamente o problema no meu caso. Na verdade, deu errado porque solicitei https://censoreddomain.com em vez de https://www.censoreddomain.com (observe o www. ). Depois que eu adicionei o www. , wget felizmente raspou todo o site para mim. Por isso, é importante corresponder exatamente ao nome canônico do domínio que você está tentando copiar .

Como o erro foi meu, acho que esse "catch" se aplica a wget em todas as plataformas, não apenas no OS X.

    
por 07.07.2016 / 22:25