Wget, algunos ejemplos de lo que se puede hacer con esta herramienta

About wget
En el siguiente artículo vamos a echar un vistazo a Wget. Hay que decir que GNU Wget es una herramienta libre que permite la descarga de contenidos desde servidores web de una forma simple y rápida. Su nombre deriva de World Wide Web (w) y de la palabra obtener (en inglés get). Este nombre viene a querer decir: obtener desde la WWW.

Hoy en día existen decenas de aplicaciones para descargar archivos de manera muy eficiente. La mayoría de ellas se basan en interfaces Web y de escritorio, y están desarrolladas para todos los sistemas operativos. Sin embargo en Gnu/Linux (también hay versión para Windows) existe el poderoso gestor de descargas de archivos wget. Esta considerado como el downloader más potente que existe. Soporta protocolos como http, https y ftp.

Descargar archivos con wget

Descarga de un archivo

La manera más simple de utilizar esta herramienta, es realizar la descarga indicando el archivo que queremos:

wget http://sitioweb.com/programa.tar.gz

Descargar utilizando diferentes protocolos

Como buen gestor de descargas, es posible solicitar más de una descarga a la vez. Incluso podremos utilizar distintos protocolos en la misma orden:

wget http://sitioweb.com/programa.tar.gz ftp://otrositio.com/descargas/videos/archivo-video.mpg

Descargar por extensión

Otra manera de descargar varios archivos que utilicen la misma extensión, será utilizando el comodín asterisco:

wget<code class="language-bash" data-lang="bash">-r -A.pdf</code>http://sitioweb.com/*.pdf

Este comando no siempre funciona, ya que algunos servidores pueden haber bloqueado el acceso a wget.

Descargar un listado de archivos

Si lo que queremos es descargar los archivos que nos vamos encontrando, solo tendremos que guardar sus URL en un archivo. Crearemos una lista llamada archivos.txt e indicaremos el nombre de la lista al comando. Es necesario colocar solo una URL por línea dentro de archivos.txt.

El comando que utilizaremos para descargar el listado creado y que guardamos en archivos.txt será el siguiente:

wget -i archivos.txt

Reiniciar una descarga

Si por el motivo que sea la descarga se interrumpió, vamos a poder continuar la descarga desde donde se haya quedado utilizando la opción c con el comando wget:

wget -i -c archivos.txt

Añade un log sobre la descarga

Si queremos obtener un log sobre la descarga, para poder controlar cualquier incidencia sobre la misma, tendremos que añadir la opción -o como se muestra a continuación:

wget -o reporte.txt http://ejemplo.com/programa.tar.gz

Limitar el ancho de banda de la descarga

En descargas muy largas podremos limitar el ancho de banda de la descarga. Con esto evitaremos que la descarga se lleve todo el ancho de banda mientras dure la descarga:

wget -o /reporte.log --limit-rate=50k ftp://ftp.centos.org/download/centos5-dvd.iso

Descargar con usuario y contraseña

Si queremos realizar una descarga desde un sitio donde se requiere de usuario/contraseña, solo tendremos que utilizar estas opciones:

wget --http-user=admin --http-password=12345 http://ejemplo.com/archivo.mp3

Intentos de descarga

Por defecto, este programa realiza 20 intentos de establecer la conexión e iniciar la descarga, en sitios muy saturados es posible que ni con 20 intentos se logré. Con la opción t aumenta a más intentos.

wget -t 50 http://ejemplo.com/pelicula.mpg

Descargar una web con wget

Ayuda man de Wget

Ayuda man de Wget

Wget no está limitado a solo descargas de archivos.Vamos a poder descargar una página completa. Solo tendremos que escribir algo como:

wget www.ejemplo.com

Descarga una web y sus elementos extra

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

Si añadimos la opción r se descargará de manera recursiva hasta 5 niveles del sitio:

wget -r www.ejemplo.com -o reporte.log

Convierte los enlaces a locales

Por defecto, los enlaces dentro del sitio apuntan a la dirección del dominio completo. Si descargamos el sitio de manera recursiva para después estudiarlo fuera de línea, podremos utilizar la opción convert-links que los convertirá en enlaces locales:

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

Obtén una copia completa del sitio

Vamos a tener la posibilidad de obtener una copia completa de un sitio. La opción –mirror es igual a utilizar las opciones -r -l inf -N que indica recursividad a nivel infinito y obteniendo la marca de tiempo original de cada archivo descargado.

wget --mirror http://www.sitio.com/

Transforma las extensiones

Si descargas el sitio completo para verlo fuera de línea es posible que varios archivos descargados no se abran, debido a extensiones como .cgi, .asp o .php. Entonces es posible indicar con la opción –html-extension que se conviertan todos los archivos a una extensión .html.

wget --mirror --convert-links --html-extension http://www.ejemplo.com

Estas son solo unas pautas generales de lo que se puede hacer con Wget. Quién quiera podrá consultar el manual online para consultar todas las posibilidades que nos ofrece este maravilloso gestor de descargas.


Categorías

Ubuntu

Damian Amoedo

Aficionado a la programación. Apasionado del software libre. Dispuesto a aprender de todo para después contarlo.

7 comentarios

  1.   Rubén Cardenal dijo

    En lo de “Descargar por extensión” he dejado de leer. No puedes descargar lo que no conoces. A no ser que el directorio pedido permita el listado de archivos y carezca de un index (y han de ocurrir ambas a la vez), eso que dices no se puede hacer. Vaya nivel.

    1.    InformaticoAnonimo dijo

      Hola Rubén, es un poco atrevida la ignorancia.
      Lo que comentas se puede hacer con un simple comando a google:
      filetype:pdf site:ubunlog.com
      En este ejemplo no hay ningún pdf en este blog, pero cambia el dominio del final por la web que prefieras y verás que facil es ver todos los ficheros de un tipo de una web.
      Ten un buen dia.

      1.    Phrank dijo

        Pero wget no se conecta a google para buscar los pdf que hay en una url. El directorio web ha de estar abierto y existir una página indice generada por mod_autoindex o análogos, como bien dice Rubén Cardenal,.

    2.    Jimmy Olano dijo

      «Este comando no siempre funciona, ya que algunos servidores pueden haber bloqueado el acceso a wget.»
      Esta enmienda que le colocaron a este artículo, pues no estoy de acuerdo con ella (aunque técnicamente es posible bloquear ciertos agentes web por las peticiones de cabecera http y devolver un mensaje 403 “no permitido”) y paso a explicar el porqué:

      Todo servidor web Apache (y estoy hablando sobre un porcentaje considerable de servidores) de manera predeterminada permiten hacer “globbing” (excelente artículo de Wikipedia, leed: https://es.wikipedia.org/wiki/Glob_(inform%C3%A1tica) .

      Esto en la práctica quiere decir, tal como especifica el sr. Rubén (y él tiene razón), QUE SI NO HAY UN ARCHIVO LLAMADO “index.php” o “index.html” (o incluso llamado simplemente “index”) el servidor tranquilamente devolverá un listado de los archivos y directorios (por supuesto en forma de una página html con la información como enlace web de cada fichero). LA MAYORÍA DE LOS SERVIDORES WEB DESACTIVAN ESTA CARACTERÍSTICA POR MEDIO DEL ARCHIVO .htacces (hablando estrictamente de Apache2) POR RAZONES DE SEGURIDAD.

      He aquí la versatibilidad de wget (ver su historia, de nuevo en Wikipedia, la que más sabe: https://es.wikipedia.org/wiki/GNU_Wget ) de analizar o “parsing” dicha información y extraer solo las extensiones que le pedimos.

      Ahora bien en el caso de que no funcione esto, por una u otra razón, podremos probar con otras funciones avanzadas de wget, cito directo en inglés:

      You want to download all the GIFs from a directory on an HTTP server. You tried ‘wget http://www.example.com/dir/*.gif’, but that didn’t work because HTTP retrieval does not support GLOBBING (las mayúsculas las pongo yo). In that case, use:

      wget -r -l1 –no-parent -A.gif http://www.example.com/dir/

      More verbose, but the effect is the same. ‘-r -l1’ means to retrieve recursively (see Recursive Download), with maximum depth of 1. ‘–no-parent’ means that references to the parent directory are ignored (see Directory-Based Limits), and ‘-A.gif’ means to download only the GIF files. ‘-A “*.gif”’ would have worked too.

      SI SE CORRE DE ESTA ÚLTIMA MANERA wget nos creará una carpeta con la dirección web solicitada en la carpeta por defecto donde estemos trabajando, y hará subdirectorios de ser necesario y allí colocará, por ejemplo, las imágenes .gif que le solicitamos.

      ————————
      SIN EMBARGO si aún así no es posible obtener solo cierta clases de archivos (*.jpg, por ejemplo) tendremos que usar el parámetro «–page-requisites» que descarga todos los elementos internos de una página html (imágenes, sonidos, css, etc) junto con la página html en sí misma («–page-requisites» se puede abreviar «-p») y que sería lo equivalente a descargar algo parecido a un “mhtml” https://tools.ietf.org/html/rfc2557

      Espero os sea útil esta información.

      1.    Damian Amoedo dijo

        Gracias por los apuntes. Salu2.

  2.   Afterbanks dijo

    Creo que tienes un error, las dos primeras líneas tienen el mismo comando.

  3.   Mike dijo

    Muchas gracias, muy buen tutorial!

Deja un comentario

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