Uso avanzado del comando wget

En lugar de limitarnos a descargar un único fichero con wget, podemos hacer un uso avanzado del comando y sacar todo su potencial, que seguro que en algún momento nos viene bien y facilita alguna tarea.

En su día ya os enseñé la forma de limitar la velocidad de descarga con wget así que eso nos lo saltamos. Ahí van algunos usos avanzados o menos conocidos de wget.

Descargar una página completa junto a todas sus dependencias

Es decir, si descargamos un HTML usando wget a secas, descargaremos la página HTML pero no las imágenes, CSS, javascript, etc a las que hace referencia. El parámetro «-p» o «–page-requisites» descarga todo este contenido. Si además añadimos el parámetro «–convert-links», los links se convertirán para que funcionen en local una vez descargados. También podemos hacer un backup de los links anteriores con «–backup-converted»:

$ wget --page-requisites --backup-converted https://rm-rf.es
$ ls -l
total 4
drwxrwxr-x 3 alex alex 4096 Aug 22 19:02 rm-rf.es
$ ls -lR *
rm-rf.es:
total 68
-rw-rw-r-- 1 alex alex 60519 Aug 21 22:55 index.html
-rw-rw-r-- 1 alex alex   242 Apr 28  2011 robots.txt
drwxrwxr-x 3 alex alex  4096 Aug 22 19:02 wp-content

rm-rf.es/wp-content:
total 4
drwxrwxr-x 3 alex alex 4096 Aug 22 19:02 themes
[...]

Descargar un website completo

En este caso más que un website completo, lo que podemos hacer es especificar por parámetro el número de niveles que recorrerá wget y descargará todo lo que encuentre en ellos, podemos especificar N niveles, todo ello se descargará en local creando una copia exacta/mirror del website que descargamos. Jugaremos con estos dos parámetros:

  -r,  --recursive          specify recursive download.
  -l,  --level=NUMBER       maximum recursion depth (inf or 0 for infinite).

Si quiero descargar por ejemplo 4 niveles de un sitio web:

$ wget -r -l 4 http://google.es/

También puedo guardar un log de las operaciones con «-o «:

$ wget -r -l 4 http://google.es/ -o descarga_website.log

También es bueno combinarlo con «–convert-links».

Descargar página junto con las cabeceras del servidor

Podemos hacer que las cabeceras se van directamente en la salida del comando:

$ wget -S http://www.google.com/

--2014-08-22 19:12:23--  http://www.google.com/
Resolving www.google.com (www.google.com)... .173.194.45.50, 173.194.45.51, 173.194.45.49, ...
Connecting to www.google.com (www.google.com)|173.194.45.50|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 302 Found
  Cache-Control: private
  Content-Type: text/html; charset=UTF-8
  Location: http://www.google.es/?gfe_rd=cr&ei=93n3U4rCJ8TI8gfH-oDwBQ
  Content-Length: 258
[...]

O guardarlas en el fichero resultante:

$ wget --save-headers http://www.google.com/
$ more google.com/index.html
$ more index.html.2 
HTTP/1.1 200 OK
Date: Fri, 22 Aug 2014 17:13:02 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=dac6e5ce9196e48f:FF=0:TM=1408727582:LM=1408727582:S=pWmR-xujz_ZeT8Bv; expires=Sun, 21-Aug-2016 17:13:02 GMT; path=/; domain=.google.es
Set-Cookie: NID=67=Ek0aw0c0biQWMw-C_RoxO1QEiIdvl54
[...]

Descargar sólo ficheros con una extensión concreta

Los comodines en la URL no nos van a funcionar, para ello debemos usar «-A» seguido de las extensiones a descargar de un directorio concreto, separadas por comas:

wget -r -P /var/tmp -A jpg,jpeg,gif,png http://www.foo.com/imagenes/

Como veis también podemos forzar la ruta de descarga. Así descargamos todas las imágenes del sitio a un directorio local.

Reaunar una descarga cancelada a mitad

Poco más que añadir, si cancelamos una descarga a mitad podemos seguir donde lo hemos dejado con el siguiente comando:

$ wget -nc -r http://www.foo.com/

Mostrar el contenido de la página por STDOUT en lugar de descargarlo

wget -O - http://google.es

Descargar URLs de un fichero de texto

Si tenemos un fichero de txt con un listado de URLs (una en cada línea), podemos descargar todas de vez con el parámetro «-i»:

$ more urls.txt 
http://google.es
http://marca.com
$ wget -i urls.txt
--2014-08-22 19:25:26--  http://google.es/
Resolving google.es (google.es)... 173.194.41.239, 173.194.41.255, 173.194.41.248, ...
Connecting to google.es (google.es)|173.194.41.239|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.es/ [following]
--2014-08-22 19:25:26--  http://www.google.es/
Resolving www.google.es (www.google.es)... 173.194.45.47, 173.194.45.56, 
[...]

--2014-08-22 19:25:26--  http://marca.com/
Resolving marca.com (marca.com)... 193.110.128.199, 2001:67c:2294:1000::f199
Connecting to marca.com (marca.com)|193.110.128.199|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
[...]

Y de momento no se me ocurren más, si sabéis vosotros alguno más, comentadlo!