Cómo hacer que WGET descargue exactamente la misma página web html que el navegador

20

Utilizando un navegador web (IE o Chrome) puedo guardar una página web (.html) con Ctl-S, inspeccionarla con cualquier editor de texto y ver los datos en un formato de tabla. Uno de esos números que quiero extraer, pero para muchas, muchas páginas web, demasiadas para hacer manualmente. Así que me gustaría usar WGET para obtener esas páginas web una después de otra, y escribir otro programa para analizar el .html y recuperar el número que quiero. Pero el archivo .html guardado por WGET cuando usa la misma URL que el navegador no contiene la tabla de datos. Por qué no? Es como si el servidor detectara que la solicitud proviene de WGET y no de un navegador web, y proporciona una página web básica, que carece de la tabla de datos. ¿Cómo puedo obtener exactamente la misma página web con WGET? - ¡Thx!

MÁS INFORMACIÓN:

Un ejemplo de la URL que trato de obtener es: enlace donde la cadena ICENX es un símbolo de cotización de fondos mutuos, que cambiaré a cualquiera de una serie de símbolos diferentes. Esto descarga una tabla de datos cuando se ve en un navegador, pero la tabla de datos falta si se busca con WGET.

    
pregunta user239598 27.01.2014 - 14:38

5 respuestas

28

Como se mencionó roadmr , la tabla de esta página está generada por javascript. wget no es compatible con javascript, solo descarga la página tal como se recibe del servidor (es decir, antes de ejecutar cualquier código de JavaScript) y, por lo tanto, falta la tabla.

Necesitas un navegador sin cabeza compatible con javascript como 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();
});

Luego, si solo quiere extraer algo de texto, lo más fácil podría ser representar la página con w3m:

$ w3m -dump page.html

y / o modifique el script phantomjs para volcar lo que le interesa.

    
respondido por el lemonsqueeze 08.11.2014 - 11:04
7

Puede descargar un sitio web completo utilizando wget --mirror

Ejemplo:

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

La línea de comando anterior que desea ejecutar cuando desea descargar un sitio web completo y ponerlo a disposición para su visualización local.

Opciones:

  • --mirror activa las opciones adecuadas para la creación de reflejos.

  • -p descarga todos los archivos que son necesarios para mostrar correctamente una página HTML determinada.

  • --convert-links después de la descarga, convierta los enlaces en el documento para su visualización local.

  • -P ./LOCAL-DIR guarda todos los archivos y directorios en el directorio especificado.

Para obtener más información sobre las opciones de Wget, lea más este artículo: Información general sobre todos los comandos de wget con ejemplos , o consulte página man de Wget .

    
respondido por el GowriShankar 18.08.2014 - 12:24
2

En lugar de --recursive , que continuará y "araña" cada enlace en su URL, use --page-requisites . Debería comportarse exactamente como las opciones que describes en los 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 obtener más información, haga man wget y busque la opción --page-requisites (use "/" para buscar mientras lee una página man).

    
respondido por el roadmr 27.01.2014 - 15:53
1

Si la respuesta del servidor difiere dependiendo de una fuente que pregunte, se debe principalmente a la variable HTTP_USER_AGENT (solo una cadena de texto) que se proporciona con una solicitud de la fuente que solicita información al servidor sobre la tecnología.

  1. Puede consultar el agente de su navegador aquí - & gt; enlace

  2. Según el manual WGET, este parámetro debería hacer el trabajo --user-agent=AGENT .

Si esto no ayuda, es decir, puede ser necesario el procesamiento de JavaScript para obtener la misma página que un navegador, o tal vez la solicitud apropiada con los parámetros GET para que el servidor prepare respuestas que no requieren JavaScript para llenar la página.

    
respondido por el Esamo 27.01.2014 - 15:01
0

Está el parámetro --recursive . Descargará todo, a veces más de lo que quieras.

wget --recursive http://url.com
    
respondido por el Braiam 27.01.2014 - 14:46

Lea otras preguntas en las etiquetas