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.
Contenido del artículo
- 1 Descargar archivos con wget
- 1.1 Descarga de un archivo
- 1.2 Descargar utilizando diferentes protocolos
- 1.3 Descargar por extensión
- 1.4 Este comando no siempre funciona, ya que algunos servidores pueden haber bloqueado el acceso a wget.
- 1.5 Descargar un listado de archivos
- 1.6 Reiniciar una descarga
- 1.7 Añade un log sobre la descarga
- 1.8 Limitar el ancho de banda de la descarga
- 1.9 Descargar con usuario y contraseña
- 1.10 Intentos de descarga
- 2 Descargar una web con wget
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
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.
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.
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.
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,.
«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.
Gracias por los apuntes. Salu2.
Creo que tienes un error, las dos primeras líneas tienen el mismo comando.
Muchas gracias, muy buen tutorial!