Como você usa o WGET para espelhar um nível de nível 1 do site, recuperando recursos JS, CSS, incluindo imagens CSS?

9

Finja que eu queria que uma simples cópia de página fosse baixada no meu HD para manutenção permanente. Eu não estou procurando por um get recursivo profundo, apenas uma única página, mas também todos os recursos carregados por essa página também podem ser baixados.

Exemplo: link

Espere:

  • O index.html
  • Qualquer imagem carregada
  • Qualquer arquivo JS carregado
  • Qualquer arquivo CSS carregado
  • Qualquer imagem carregada no arquivo CSS
  • links para os recursos da página localizados para trabalhar com as cópias baixadas (sem dependência da web)

Estou interessado em saber se você pode me ajudar a encontrar a melhor sintaxe wget ou outra ferramenta que fará isso. As ferramentas que eu tentei normalmente não conseguem obter as imagens carregadas pelo CSS, assim a página nunca parece certa quando carregada localmente. Obrigada!

Solução Tangente

Eu encontrei uma maneira de fazer isso usando o FireFox. O salvamento padrão está quebrado e há um complemento que é chamado de "Save Complete", que aparentemente pode fazer um bom trabalho com isso. No entanto, você não pode baixá-lo porque ele diz que não é suportado na versão atual do FireFox. O motivo é que foi colocado neste addon: "Mozilla Archive Format". Instale isso e, em seguida, quando você usar Arquivo > "Save Page As .." há uma nova opção chamada "Web Page, completa", que é essencialmente o antigo addon, que corrige a implementação de ações que o FireFox usa (o que é terrível). Esta não é uma solução WGET, mas fornece uma solução viável.

EDIT: Outra questão ridícula para quem pode estar seguindo esta questão no futuro, tentando fazer isso. Não deixe o addon para funcionar corretamente, você precisa para Ferramentas > Mozilla Archive Formate e altere a configuração padrão (terrível) de "tire um instantâneo fiel da página" para "preservar scripts e fonte usando Save Complete", caso contrário o addon esvaziará todos os seus arquivos de script e os substituirá pelo texto "/ * Script removido pelo snapshot save * / ".

    
por Lana Miller 01.10.2011 / 04:26

5 respostas

11

wget -p -k link

O -p irá obter todos os elementos necessários para visualizar o site corretamente (css, imagens, etc). O -k mudará todos os links (para incluir aqueles para CSS e imagens) para permitir que você visualize a página off-line como ela apareceu on-line.

Atualização: Isso é específico para o seu site de exemplo: tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

A divisão:

-H = Permite que o wget vá para um host externo. Obrigatório desde que o tumblr não tem suas imagens na primeira página no mesmo endereço, eles estão usando secure.assets.tumblr.com veja nota sobre como excluir domínios

-N = irá pegar apenas arquivos que são mais recentes do que você tem atualmente, caso você esteja baixando a mesma página novamente com o tempo

-k = converte seus links para exibi-lo off-line corretamente

-p = pega todos os elementos necessários para visualizá-lo corretamente (css, imagens, etc)

- exclude-domains = desde que a página inicial do tumblr.com tem um link para o quantserve.com e eu estou supondo que você não quer este material, você precisa excluí-lo do seu download do wget. Observação : é muito importante que você deve usar com -H porque se você acessa um site e eles têm vários links para hosts externos (pense em anunciantes e analíticos coisas) então você vai pegar essas coisas também!

- não é necessário certificado de verificação, pois o tumblr está usando https

-U altera o agente do usuário. Não é realmente necessário nesta instância, pois permite o agente de usuário wget padrão, mas sei que alguns sites o bloquearão. Eu apenas joguei aqui, para o caso de você encontrar algum problema em outros sites. No fragmento de exemplo que dei, ele aparece como Mozilla Firefox 6.02a

finalmente você tem o site: link

    
por 01.10.2011 / 05:44
3

Para o site específico que você mencionou e muitos outros codificados como wget (e enrolar), simplesmente não funcionarão. A questão é que alguns dos links de ativos necessários para renderizar a página em um navegador são criados por meio de javascript. O Wget tem uma solicitação de recurso pendente para executar o javascript:

link

No entanto, até que isso seja concluído, os sites que criam links de recursos usando javascript não serão clonáveis usando o wget. A solução mais fácil é encontrar uma ferramenta que esteja realmente criando um DOM e analisando o javascript como um mecanismo de navegador (ou seja, o método do firefox que você mencionou).

    
por 02.10.2011 / 06:22
1

Você também pode fazer isso automaticamente (ou programaticamente, se você codifica) emitindo um comando via shell usando wget:

wget --convert-links -r http://www.yourdomain.com

Ele fará o download da página e dos arquivos internos e tornará os links locais.

    
por 01.10.2011 / 05:11
-1
wget -r http://www.example.com

Eu acho que vai pegar tudo, mas dê uma chance e descubra.

    
por 01.10.2011 / 05:12
-1

$ ( man wget ):

-p

--page-requisites

This option causes Wget to download all the files that are necessary to properly display a given HTML page. This includes such things as inlined images, sounds, and referenced stylesheets.

Ordinarily, when downloading a single HTML page, any requisite documents that may be needed to display it properly are not downloaded. Using -r together with -l can help, but since Wget does not ordinarily distinguish between external and inlined documents, one is generally left with ''leaf documents'' that are missing their requisites.

For instance, say document 1.html contains an "<IMG>" tag referencing 1.gif and an "<A>" tag pointing to external document 2.html. Say that 2.html is similar but that its image is 2.gif and it links to 3.html. Say this continues up to some arbitrarily high number.

If one executes the command:

wget -r -l 2 http://<site>/1.html

then 1.html, 1.gif, 2.html, 2.gif, and 3.html will be downloaded. As you can see, 3.html is without its requisite 3.gif because Wget is simply counting the number of hops (up to 2) away from 1.html in order to determine where to stop the recursion. However, with this command:

wget -r -l 2 -p http://<site>/1.html

all the above files and 3.html's requisite 3.gif will be downloaded. Similarly,

wget -r -l 1 -p http://<site>/1.html

will cause 1.html, 1.gif, 2.html, and 2.gif to be downloaded. One might think that:

wget -r -l 0 -p http://<site>/1.html

would download just 1.html and 1.gif, but unfortunately this is not the case, because -l 0 is equivalent to -l inf---that is, infinite recursion. To download a single HTML page (or a handful of them, all specified on the command-line or in a -i URL input file) and its (or their) requisites, simply leave off -r and -l:

wget -p http://<site>/1.html

Note that Wget will behave as if -r had been specified, but only that single page and its requisites will be downloaded. Links from that page to external documents will not be followed. Actually, to download a single page and all its requisites (even if they exist on separate websites), and make sure the lot displays properly locally, this author likes to use a few options in addition to -p:

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

To finish off this topic, it's worth knowing that Wget's idea of an external document link is any URL specified in an "<A>" tag, an "<AREA>" tag, or a "<LINK>" tag other than "<LINK REL="stylesheet">".

    
por 01.10.2011 / 05:43