Como obter o WGET para fazer o download da mesma página da Web html como navegador

23

Usando um navegador da Web (IE ou Chrome), posso salvar uma página da Web (.html) com o Ctl-S, inspecioná-lo com qualquer editor de texto e ver os dados em um formato de tabela. Um desses números que eu quero extrair, mas para muitas, muitas páginas da web, muitas para fazer manualmente. Então eu gostaria de usar o WGET para obter essas páginas da web uma após a outra, e escrever outro programa para analisar o .html e recuperar o número que eu quero. Mas o arquivo .html salvo pelo WGET ao usar o mesmo URL do navegador não contém a tabela de dados. Por que não? É como se o servidor detectasse que a solicitação vinha do WGET e não de um navegador da Web e fornecia uma página da Web esqueleto, sem a tabela de dados. Como posso obter exatamente a mesma página da Web com o WGET? - Thx!

MAIS INFORMAÇÃO:

Um exemplo do URL que estou tentando buscar é: link onde a string ICENX é um símbolo de ticker de fundo mútuo, que eu vou mudar para qualquer um dos vários símbolos de ticker. Isso faz o download de uma tabela de dados quando visualizada em um navegador, mas a tabela de dados está ausente se obtida com o WGET.

    
por user239598 27.01.2014 / 15:38

5 respostas

31

Como roadmr observou, a tabela nesta página é gerada por javascript. wget não suporta javascript, apenas copia a página como recebida do servidor (ou seja, antes que qualquer código javascript seja executado) e assim a tabela está faltando.

Você precisa de um navegador sem cabeçalho que suporte javascript como phantomjs :

$ phantomjs save_page.js http://example.com > page.html

com save_page.js:

var system = require('system');
var page = require('webpage').create();

page.open(system.args[1], function()
{
    console.log(page.content);
    phantom.exit();
});

Então, se você quiser apenas extrair algum texto, é mais fácil renderizar a página com o w3m:

$ w3m -dump page.html

e / ou modifique o script phantomjs para apenas descartar o que lhe interessa.

    
por lemonsqueeze 08.11.2014 / 12:04
7

Você pode baixar um site completo usando wget --mirror

Exemplo:

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

A linha de comando acima que você deseja executar quando quiser baixar um site completo e disponibilizá-lo para visualização local.

Opções:

  • --mirror ativa as opções adequadas para espelhamento.

  • -p baixa todos os arquivos necessários para exibir corretamente uma determinada página HTML.

  • --convert-links após o download, converta os links no documento para visualização local.

  • -P ./LOCAL-DIR salva todos os arquivos e diretórios no diretório especificado.

Para mais informações sobre as Opções do Wget Leia Mais este artigo: Visão geral Sobre todos os comandos wget com exemplos ou marque página do manual do Wget .

    
por GowriShankar 18.08.2014 / 14:24
2

Em vez de --recursive , que apenas irá adiante e "aranha" em todos os links do seu URL, use --page-requisites . Deve se comportar exatamente como as opções que você descreve nos navegadores gráficos.

       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.

Para mais informações, faça man wget e procure a opção --page-requisites (use "/" para pesquisar enquanto lê uma página man).

    
por roadmr 27.01.2014 / 16:53
1

Se a resposta do servidor for diferente dependendo de uma fonte solicitante, é principalmente devido à variável HTTP_USER_AGENT (apenas uma cadeia de texto) que é fornecida com uma solicitação da fonte solicitante, informando ao servidor sobre tecnologia.

  1. Você pode verificar seu agente de navegação aqui - > link

  2. De acordo com o manual do WGET, este parâmetro deve fazer o trabalho --user-agent=AGENT .

Se isso não ajudar, ou seja, o processamento do JavaScript pode ser necessário para obter a mesma página que um navegador ou talvez uma solicitação apropriada com parâmetros GET para que o servidor prepare respostas que não exijam JavaScript para preencher a página.

    
por Esamo 27.01.2014 / 16:01
0

Existe o parâmetro --recursive . Vai baixar tudo, às vezes mais do que você quer.

wget --recursive http://url.com
    
por Braiam 27.01.2014 / 15:46

Tags