Descarga de páginas web con wget

A partir de este mes, estaré inmerso en un trabajo de investigación y desarrollo para obtener mi título de «suficiencia investigadora». Más adelante comentaré en detalle cuál es el objetivo y en qué consiste este trabajo, pero durante una temporada, escribiré aquí sobre distintas herramientas open-source que integraré en la herramienta final que quiero conseguir como «prueba de concepto». Una de las herramientas en las que me basaré es el conocido GNU Wget, una utilidad para la descarga no-interactiva de ficheros web. Soporta los protocolos http, https y ftp, así como el uso de proxys http.

Veamos algunas de las más importantes opciones de este versátil comando:

-r Descarga recursiva. Sin más parámetros se seguirán todos los enlaces para descargar de forma masiva todo un site.
-l # : Profundidad de descarga # (cuántos niveles de enlaces se deben seguir)
-x : crear estructura de directorios en el disco duro mapeando la estructura de carpetas del servidor web
-np: (no-parent) al descargar de forma recursiva, no seguir los enlaces que lleven a niveles superiores al inicial en la estructura de carpetas
– N : time-stamping. Esta opción es una de las más importantes si tu intención es descargar periodicamente cierta web y traerte sólo las actualizaciones ocurridas desde la última descarga. Es decir, con esta opción conseguiremos una actualización incremental, con lo que no sólo se ahorra en ancho de banda, ¡sino también en tiempo! Un fichero se marcará para descarga si se cumple alguna de las siguientes condiciones: 1. no tenemos ya un fichero local con el mismo nombre que el archivo a descargar y 2) existe un fichero con el mismo nmbre, pero el archivo remoto fue modificado más recientemente que el local. Para implementar esas condiciones, debemos de conocer la fecha de última modificación tanto del fichero local como del remoto. Esta información se conoce como time-stamps.

Según la documentación, Wget se fija también en cambios en el tamaño del archivo. En caso de diferencia entre el tamaño local y remoto, se descargará el fichero, independientemente de la fecha del time-stamp.

– P : directorio prefijo, es decir, el directorio local de destino a partir del cual se guardarán todos los ficheros remotos que descarguemos. Por defecto es . (el directorio actual).–cookies=on : activar el uso de cookies. Algunas páginas sólo permiten ser visitadas si nuestro navegador dispone de ciertas cookies (generalmente, estas cookies se instalan en una página inicial de login. A partir de ahí, con el login correcto y las cookies cargadas, podremos visitar/descargar cualquier otra página)

–load-cookies=cookie_file : acompaña a la opción anterior. cookie_file es el nombre del fichero de donde wget leerá las cookies que enviará al servidor en cada petición.

–save-cookies=cookie_file : precede o acompaña a la anterior. Con esta opción, podremos visitar una página y guardar sus cookies (las cookies de la página visitada) en nuestro fichero local cookie_file.

–timeout=# : fija un tiempo de # segundos de espera. Si se cumple ese tiempo sin haber conseguido acceder al fichero web remoto, la conexión se dará por terminada. Es equivalente a especificar –dns-timeout, –connect-timeout, y –read-timeout, con un valor #.

Por defecto, wget fija el valor de –read-timeout a 900 segundos. Si ponemos un timeout de 0, deshabilitaremos todos los valores de espera (de timeout).

-R patrón : indica que no queremos descargar ningún fichero cuyo nombre case con el patrón especificado. Por ejemplo -«R aif,au,avi,class,gif,java,jpg,mid,mov,mp3,mpeg,mpg,png,ram,rm,swf,wmv,zip» evitaría la descarga de los ficheros gráficos, de vídeo y música asociados a una página web que estemos descargando.

-o fichero.log : guarda un log de toda la actividad de GNU Wget en el fichero fichero.log.

En DevArticles.com podemos leer un artículo con ejemplos básicos de utilización de algunas de las opciones mencionadas.

Y si queremos experimentar con todas sus posibles opciones por nosotros mismos, en la Universidad de Cornell han preparado un circuito de páginas con distintas opciones y enlaces, para probar GNU Wget y otros web spider. Que os divirtáis!

25 comentarios en «Descarga de páginas web con wget»

  1. Hola! pues aún no he encontrado una web no descargable con wget y la verdad es me gustaría tener algunos ejemplos de webs problemáticas para esta aplicación (si tuvieras algún ejemplo…)

  2. Hola quisiera saber como puedo guardar las cookies un un txt por que pruebo y solo me crea el archivo con una especie de título y no guarda las cookies correspondientes.
    Espero me puedas ayudar atte. Pablo.

  3. Hola necesito ayuda con la carga de las cookies para descargar archivos de una web: el problema es que no puedo guardar las cookies en el txt intento con el código:
    wget –save-cookie cookies.txt –post-data user=j@gmail.com password=xxxxx http://mail.google.com/mail/
    y en el archivo guarda tres lineas que son como una especie de introducción(título).
    Con lo otro que probe fué con la exportación de cookies que tiene Internet explorer, importa cookies pero parace que no sirven.
    Espero me puedas ayudar.
    Esperaré tu respuesta.
    Atte. Pablo

  4. Los parámetros de –post-data no deberían de ir entre comillas y separados por & :
    «user=j@gmail.com&password=xxxxx» ?
    Por otra parte, si guardas las cookies con save, deberías de leerlas luego con –load-cookies, no? Finalmente, no deberías de usar también –keep-session-cookies?

  5. Gracias por todo,

    Tengo una pagina que es de torrents que necesita usuario y contraseña pero no consigo que me descarge el html de la pagina me muestra una parte reducida y donde vienen los torrents no. Alguna ayuda?

  6. Hola David: con tan pocos datos no sé a qué puede ser debido, pero si dices que necesitas usuario y contraseña, asegúrate de pasárlos con las opciones :
    –user=user
    –password=password
    de wget…

  7. No puedo ver la página, pues me pide que algún miembro me invite….

    «A partir de este momento, el tracker de Animersion ha pasado al sistema de invitaciones. Necesita una invitación de un miembro para poder crearse una cuenta»…

  8. Pero yo no te puedo dar mi password y usuario. Imaginate usuario pepe y contraseña pepe. Cuando entras dentro de esta pagina salen una serie de torrens que se van actualizando, yo lo que quiero es ver ese codigo para dinamicamente poder descargarme el torrent que busque, la cuestion es que he probado con wget y lo que me baja es un fichero torrent.php donde veo que pone Bienvenido invitado y eso es lo que me da a pensar de que no entro bien con el wget y no me logo bien.
    Alguna ayuda?

  9. david: NO necesito tu contraseña 🙂 La web dice que si quieres, me puedes mandar una invitación por email (supongo que tendrás esta opción en tu panel de usuario de esa web). Pero TAMPOCO la necesito (tengo demasiados sitios desde los que descargar y la verdad, descargo más de lo que puedo leer !:-O Tu problema parece ser debido a cookies. Es probable que cuando te identifiques en esa web, tu navegador reciba una cookie. Has de simular el mismo comportamiento con wget (mírate las opciones «–save-cookies fichero» y «–load-cookies fichero»)

  10. No me deja todavia envia invitaciones ya que tengo que superar un ratio especifico (no dudes que te mandare una cuando tenga posibilidad). Te cuento lo que hago
    wget –save-cookies cookies.txt –post-data ‘user=usuarioi&password=mipass’ http://xbtt.animersion.net/
    Posteriormente hago
    wget –load-cookies cookies.txt -p wget http://xbtt.animersion.net/

    Esto me crea :
    cookies.txt index.html xbtt.animersion.net
    donde xbtt.animeersioin.net es un directorio con
    un index.html y un robots.txt pero no tengo lo que busco
    🙁

  11. David: si miro el código fuente de la página que me indicas, el identificador de usuario se guarda en un campo de nombre uid (y no user, como pones tú). Ídem para el campo password: según el código fuente de esa página, va en un campo que se llama «pwd» y no password como tú indicas).

    Finalmente, te recomiendo que uses la extensión LiveHTTPHeaders de Firefox para ver qué es exactamente lo que está pasando de tu navegador a la web y luego repliques el mismo funcionamiento con wget (o con curl).

  12. Gracias por todo pero yo de html como que no entiendo mucho. Siento mucho no poder haberlo solucionado :-(. Queda pendiente lo de mandarte la invitacion porque me has ayudado mucho. Espero que me puedas facilitar tu correo para poder mandartela.

  13. A ver: lo haces todo bien, salvo el primer paso, que deberías de escribir lo siguiente:

    $ wget –save-cookies cookies.txt –post-data «uid=usuarioi&pwd=mipass» http://xbtt.animersion.net/login.php

    Te lo digo sin poder probarlo, pero la orden anterior debería de autenticarte correctamente y generar el fichero de cookies. Luego sería:

    $ wget –load-cookies cookies.txt
    http://xbtt.animersion.net/torrents.php

    No te preocupes por la invitación, prefiero que sigas comentando los artículos 🙂

  14. Muchisimas gracias al final lo conseugi como tu dijiste. Creo que ayer lo probe pero como estaba tan saturado lo mismo ni me di cuenta. Muchas gracias por todo, ahora por fin puedo empezar el script a ver que tal.
    Gracias y saludos,

  15. hola otra vez. Soy el pesao de turno. A ver sime pudieras ayudar.
    Ya he conseguido lo dela pagina como te comente, pero ahora me surge otro problemilla.
    Gracias al html he podido conseguir identifcar la cadena para descargar el fichero. De hecho si pongo esa cadena en el navegador me baja el fichero que yo solicito pero al hacerlo con el wget me descarga otro fichero que no tiene nada que ver. O sea:
    wget http://xbtt.animersion.net/download.php?fid=130947.torrent
    no me saca lo mismo que poner la direccion en el navegador.
    Sabrias si tengo que poner otra opcion en el wget para conseguir lo mismo?

    Muchisismas gracias y saludos,

  16. Pues miren….

    Yo si tengo curiosidad
    me gustaria saber que es lo que hay en esa web
    de la que habla david CPV

    aunque debo reconocer que no encuentro mucho tiempo para leer..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.