Explotando las potencialidades de Wget

Maikel Llamaret Heredia Leído 992 veces Tutoriales GNU Linux Terminal wget

Saludos a nuestros fieles seguidores. En ocasiones nos vemos ante la disyuntiva de como descargar determinado contenido de internet. Existen múltiples maneras de hacerlo. Pero lo que algunos pasan por alto es que en nuestros sistemas GNU/Linux tenemos una potentísima herramienta que nos permite hacer la tarea de muchas maneras. Hoy volvemos a la terminal de línea de comandos de nuestros amados sistemas GNU/Linux. Hablaremos de Wget y de sus potencialidades a la hora de descargar contenido de Internet. En fin, hoy en SWL-X hablamos de GNU Wget.

WGET ¿Y eso qué es?

GNU Wget es una herramienta libre que permite la descarga de contenidos desde servidores web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get), lo que podría traducirse como obtener desde la WWW. Fue escrito originalmente por Hrvoje Nikšić y por ser un proyecto de software libre tiene una gran cantidad de colaboradores directos e indirectos. Su primera versión se lanzó en 1996, coincidiendo con el boom de popularidad de la web.

Interesante, pero ¿Que características tiene ese tal WGET?

Es un programa utilizado a través de línea de comandos, principalmente en sistemas tipo UNIX, especialmente en GNU/Linux. Escrito en el lenguaje de programación C, Wget puede ser fácilmente instalado en sistemas derivados de UNIX, y ha sido portado a muchas interfaces gráficas de usuario (GUI) y aplicaciones gráficas de descarga como Gwget2 para GNOME, wGetGUI3 y VisualWget4 para Microsoft Windows, Wget 1.10.2r25 para Mac OS X.

Actualmente soporta descargas mediante los protocolos HTTP, HTTPS y FTP. Entre las características más destacadas que ofrece Wget está la posibilidad de fácil descarga de mirrors (repositorios) complejos de forma recursiva, conversión de enlaces para la visualización de contenidos HTML localmente, soporte para proxies, etc.

Wget ha sido diseñado para la robustez en conexiones de red lentas o inestables. Si una descarga no se completa debido a un problema en la red, Wget automáticamente tratará de seguir descargado desde donde acabó, y repetir el proceso hasta que el archivo completo haya sido recuperado. Fue uno de los primeros clientes que hizo uso de la entonces nueva cabecera HTTP Range, para ofrecer ésta característica.

Wget opcionalmente puede trabajar como una araña web extrayendo recursos enlaces de las páginas web HTML y descargarlas en la secuencia, repitiendo el proceso recursivamente hasta que todas las páginas hayan sido descargadas o hasta que haya sido alcanzada una profundidad de repetición máxima especificada por el usuario. Las página web descargadas son guardadas en una estructura de directorio que se parece a un servidor remoto. Esta descarga recursiva permite hacer una copia exacta de cualquier sistema de archivos parcial o completamente de un sitio web vía HTTP. Los enlaces de sitios web HTML descargados pueden ser ajustados para indicar el punto o zona de descarga. Cuando se realiza esta clase de copia exacta del sistema de archivos (en inglés mirroring) automática de un sitio web, Wget es compatible con el estándar de exclusión de robots.

¿Me enseñas algunos tips para explotar su potencialidad?

Ok, ya veo que los lectores de este espacio Web son del tipo menos teoría y mas ejemplos prácticos, por favor. Pues bien, veamos como explotar al maximo esta poderosa herramienta de descargas de contenidos de Internet.

La sintáxis básica para el uso de wget sería algo como:

wget http://sitio.com/archivo.tar.gz

Para descargar varios archivos desde una sola línea de comandos pudiéramos usar algo como:

wget http://sitio.com/archivo.tar.gz  ftp://otrositio.com/descargas/pelicula.mkv

También podemos indicar más de una descarga aprovechando los tipos de archivos.

wget http://sitio.com/*.pdf

Podemos descargar varios archivos, índicalos a través de una lista en un fichero de texto plano. Creamos una lista en lista.txt que serán descargados, por ejemplo http://sitio.com/archivo.tar.gz, http://otrositio.com/rpm/paquete.rpm, ftp://downloadsitio.com/descargas/distro.iso y los descargamos todos indicando a wget el archivo en caso que lista.txt esté en una ubicación diferente a nuestra ubicación en la terminal, debemos indicárselo a wget:

wget -i /ubicacion-de-la-lista/lista.txt

Si mientras descargas algo, tu conexión se detuvo, o tuviste que apagar el ordenador o cualquier otra contrariedad que interrumpió la descarga,
tranquilo, continuaremos la descarga desde donde se haya quedado con la opción c.

wget -c http://sitio.com/libro.pdf
wget -i -c lista.txt

Si deseas crear un reporte sobre tu descarga puedes hacer lo siguiente:

wget -o reporte.txt http://sitio.com/archivo.tar.gz

En descargas de gran volumen como el iso de alguna distro de Linux, puedes limitar el ancho de banda de la descarga en específico, ya que podría ser que la descarga se llevará todo el ancho de banda durante varias horas.

wget  --limit-rate=50k ftp://ftp.ejemplo.org/download/ejemplo-dvd.iso

Si es un sitio donde se requiere de usuario/contraseña usa estas opciones.

wget --http-user=usuario --http-password=contraseña http://sitio.com/bohemian-rapsody.mp3

Por defecto, wget realiza 20 intentos para establecer la conexión e iniciar la descarga, en sitios muy saturados es posible que 20 intentos no sean suficientes. Gracias a la opción t (tries) puedes aumentarlo a más intentos.

wget -t 50 http://sitio.com/mesa-redonda.mpg

Si quieres que lo intente hasta que logre la conexión, entonces usa:

wget -t inf http://sitio.com/mesa-redonda.mpg

La herramienta wget permite con el parametro -e establecer variables de entorno como si estuvieras en .wgetrc que es el archivo de configuración. Es útil cuando queremos por ejemplo usar wget dentro de una conexión con proxy y usuario y contraseña y queremos hacer una descarga usando una única línea de comandos, por ejemplo:

wget -e use_proxy=yes -e http_proxy=http://user:pass@proxy:port/ https://sitio.com

Subiendo la parada, WGET sirve para mucho más

Con wget no solo podemos descargar ficheros específicos o grupos de ficheros. También podemos descargar sitios Web completos o parcialmente.

wget www.swlx.info

Con la opción p descargaremos además todos los elementos extras necesarios del sitio como hojas de estilos, imágenes en línea, etc.

wget -p www.swlx.info

El parámetro r se descarga recursivamente hasta 5 niveles del sitio. El parámetro l se aumenta el nivel de recursividad hasta el número indicado, también es posible usar 'inf' como valor de recursividad infinito.

wget -r www.sitio.com -o reporte.log
wget -r -l10 www.sitio.com -o reporte.log

Los enlaces internos dentro de cualquier sitio web apuntan a la dirección del dominio completo.Si tu intención es descargar el sitio recursivamente y después usarlo sin conexión (off line) usa la opción convert-links que los convertirá en enlaces locales, apuntando a las páginas dentro del sitio descargado. Algo muy útil si pasas mucho tiempo desconectado pero necesitas estudiar el contenido de determinados sitios Web.

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

también puedes usar:

wget -k -r http://www.sitio.com/

Como opción por defecto, el sitio a descargar se guarda en el mismo directorio donde estés ejecutando wget, con la opción P puedes indicar un directorio distinto.

wget -r -l3 -P/tmp/sitio ftp://www.sitio.com/

Si lo que quieres es hacer una copia (un espejo o mirror) completa del sitio, entonces usa el parámetro --mirror, es igual a usar las opciones -r -l inf -N que indica recursividad a nivel infinito y obtienendo la marca de tiempo original de cada archivo descargado (opción -N). Esto es ideal para hacer mirrors de repositorios a los cuales no puedes llegar con cosas como rsync, que sería lo ideal.

wget --mirror https://www.swlx.info/

o de la forma:

wget -m https://www.swlx.info/ 

Si descargas el sitio completo para verlo fuera de línea (off line) es posible que varios archivos descargados no se abran, debido a extensiones como .cgi, .asp o .php, es entonces posible indicarle a wget con la opción E o --html-extension que convierta todos los archivos a extensión .html.

wget --mirror --convert-links --html-extension https://www.swlx.info

o de la forma

wget -m -k -E https://www.swlx.info

El parámetro H (span hosts) expande la recursividad a los sitios desde donde se enlace el original.

Por ejemplo, la siguiente línea de comandos descargará el sitio con una recursividad de 3 niveles (-r -l3), conviertiendo los enlaces a locales para examinarlo off line (-k), convierte todo a extensiones .html (-E), descarga completamente imágenes y demás elementos de cada página (-p) y además descarga la página externa de los enlaces que apunten fuera del sitio (-H).

Usar este tipo de descargas puede transferir un cúmulo de información excesivamente grande afectando tu ancho de banda y tu espacio de almacenamiento.

wget -H -r -l3 -k -E -p http://blog-de-ejemplos.com

Llevando WGET al extremo

Veamos un ejemplo que está muy bien detallado en este enlace, es una línea que busca archivos de música mp3 desde una lista de sitios que previamente hayas definido, recuerda, un renglón por cada sitio.

wget -r -l1 -H -t1 -nd -N -np -A.mp3 -erobots=off -i sitiosmp3.txt

Veámoslo por partes:

  • [-r -l1] recursivo en solo un nivel, solo buscará un nivel en cada subdirectorio que encuentre por sitio.
  • [-H] si dentro del sitio encuentra un enlace externo, que lo siga, ya que posiblemente lleve a otro sitio de descarga de múscia.
  • [-t1] -t es igual --tries, solo hará un intento de conexión, si no lo logra continua al siguiente sitio.
  • [-nd] indica no crear subdirectorios para cada archivo descargado, es decir, todo nos lo deja en el mismo lugar.
  • [-N] conserva la fecha y hora (timestamp) del archivo original que se descargue, de otro modo pondría la fecha y hora de nuestro sistema.
  • [-np] no parent, no seguir enlaces a directorios superiores, solo del actual y uno hacía abajo, por -r -l1
  • [-A.mp3] -A indica a wget el tipo de archivo a descargar solamente, en este caso solo "mp3".
  • [-erobots=off] esto evita que wget ignore los archivos 'robots.txt' que pudiera haber, ya que puede ser que dentro de estos archivos haya indicaciones de que subdirectorios los buscadores no deben hurgar (incluyendo a wget). Con esto lo evitamos y buscamos en todo el nivel.
  • [-i sitiosmp3.txt] el archivo con la lista (hecha a tu gusto, con unos cuantos o decenas de sitios de música) de los sitios desde donde buscar "mp3" y descargarlos.

Si ejecutas este comando de manera diaria o a través de un cron entonces se descargará la música, y gracias a la marca de tiempo solo descargará los que sean más nuevos que el original.

Resumiendo

Supongo que luego de leer esta extensa guía no te quede la menos idea de la potencia de wget. Actualmente existen interfaces gráficas para wget, pero la línea de comandos es y seguirá siendo la manera mas versátil de explotar todo el poderío de dicha aplicación. No le tengas miedo al terminal, úsalo a tu favor, créeme que es tu mejor aliado.






Acerca del Autor
Maikel Llamaret HerediaMaikel Llamaret Heredia: Creador y actual Mantenedor del Proyecto SWL-X. Desarrollador y diseñador Web. Cofundador de Web & Media Integrated Solutions. Con más de 10 años de experiencia en la administración de sistemas GNU/Linux. Actualmente uno de los administradores de la Web del Grupo de Usuarios de Tecnologías Libres en Cuba.

Blog Comments powered by Disqus.

Entrada Anterior Siguiente Entrada