Come ottenere WGET per scaricare la stessa html della stessa pagina web come browser

24

Usando un browser web (IE o Chrome) Posso salvare una pagina web (.html) con Ctl-S, ispezionarla con qualsiasi editor di testo e vedere i dati in un formato di tabella. Uno di quei numeri che voglio estrarre, ma per molte, molte pagine web, troppe da fare manualmente. Quindi mi piacerebbe usare WGET per ottenere quelle pagine Web una dopo l'altra, e scrivere un altro programma per analizzare il .html e recuperare il numero che voglio. Ma il file .html salvato da WGET quando si utilizza lo stesso URL del browser non contiene la tabella dei dati. Perchè no? È come se il server rilevasse che la richiesta proviene da WGET e non da un browser Web e fornisce una pagina Web scheletro, priva della tabella dei dati. Come posso ottenere la stessa identica pagina Web con WGET? - Thx!

ALTRE INFORMAZIONI:

Un esempio dell'URL che sto cercando di recuperare è: link dove la stringa ICENX è un simbolo di ticker fondo comune, che cambierò in uno qualsiasi di un numero di simboli ticker diversi. Questo scarica una tabella di dati quando viene visualizzata in un browser, ma manca la tabella dei dati se viene recuperata con WGET.

    
posta user239598 27.01.2014 - 15:38
fonte

5 risposte

32

Come notato roadmr , la tabella su questa pagina è generata da javascript. wget non supporta javascript, semplicemente scarica la pagina come ricevuta dal server (cioè prima dell'esecuzione di qualsiasi codice javascript) e quindi manca la tabella.

Hai bisogno di un browser headless che supporti javascript come phantomjs :

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

con save_page.js:

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

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

Quindi se vuoi solo estrarre del testo, la cosa più semplice potrebbe essere il rendering della pagina con w3m:

$ w3m -dump page.html

e / o modifica lo script phantomjs per scaricare semplicemente ciò che ti interessa.

    
risposta data lemonsqueeze 08.11.2014 - 12:04
fonte
8

Puoi scaricare un sito web completo utilizzando wget --mirror

Esempio:

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

La precedente riga di comando che si desidera eseguire quando si desidera scaricare un sito Web completo e reso disponibile per la visualizzazione locale.

Opzioni:

  • --mirror attiva le opzioni adatte al mirroring.

  • -p scarica tutti i file necessari per visualizzare correttamente una determinata pagina HTML.

  • --convert-links dopo il download, converti i link nel documento per la visualizzazione locale.

  • -P ./LOCAL-DIR salva tutti i file e le directory nella directory specificata.

Per ulteriori informazioni sulle opzioni di Wget Leggi di più questo articolo: Panoramica Informazioni su tutti i comandi wget con esempi o su Pagina man di Wget .

    
risposta data GowriShankar 18.08.2014 - 14:24
fonte
2

Invece di --recursive , che andrà avanti e "spider" ogni singolo link nel tuo URL, usa --page-requisites . Dovrebbe comportarsi esattamente come le opzioni che descrivi nei browser grafici.

       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.

Per ulteriori informazioni, fai man wget e cerca l'opzione --page-requisites (usa "/" per cercare mentre leggi una pagina man).

    
risposta data roadmr 27.01.2014 - 16:53
fonte
1

Se la risposta del server differisce a seconda di una fonte di richiesta, è principalmente a causa della variabile HTTP_USER_AGENT (solo una stringa di testo) fornita con una richiesta dall'origine richiedente, che informa il server sulla tecnologia.

  1. Puoi controllare il tuo agente del browser qui - & gt; link

  2. Secondo il manuale di WGET questo parametro dovrebbe fare il lavoro % Co_de%.

Se questo non aiuta, per esempio potrebbe essere necessaria l'elaborazione JavaScript per ottenere la stessa pagina di un browser, o forse la richiesta appropriata con i parametri GET, quindi il server preparerà una risposta che non richiede JavaScript per riempire la pagina.

    
risposta data Esamo 27.01.2014 - 16:01
fonte
0

C'è il parametro --recursive . Scaricherà tutto, a volte più di quello che vuoi.

wget --recursive http://url.com
    
risposta data Braiam 27.01.2014 - 15:46
fonte

Leggi altre domande sui tag