GNU Wget

Revisión del 09:02 21 abr 2010 de Enrique oni (discusión | contribuciones) (Ficheros de Configuración)

GNU Wget es una herramienta de software 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), esto quiere decir: obtener desde la WWW.

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 (espejos) complejos de forma recursiva, conversión de enlaces para la visualización de contenidos HTML localmente, soporte para proxies...

Su primer versión se lanzó en 1996, coincidiendo con el boom de popularidad de la web. Es un programa utilizado a través de línea de comandos, principalmente en sistemas de UNIX/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 Gwget[1] para GNOME, wGetGUI[2] y VisualWget[3] para Microsoft Windows, Wget 1.10.2r2[4] para Mac OS X.

Características

Robustez

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 Gama HTTP de cabecera (header), para soportar está característica.

Descarga recurrente

Wget opcionalmente puede trabajar como un web crawler 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áginas descargadas son guardadas en una estructura de directorio que se parece a un servidor remoto. Esta descarga recurrente 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 soporta el estándar de exclusión de robots.

Portabilidad

Escrito en una forma que permita la portabilidad, en lenguaje C y con la menor cantidad posible de bibliotecas de terceros, Wget requiere no mucho más que un compilador C y una interfaz tipo BSD para usar la red con TCP/IP. Diseñado como un programa Unix invocado desde un Unix shell, el programa ha sido portado a numerosos sistemas y ambientes tipo Unix, tal como Cygwin y Mac OS X, así como también a sistemas Microsoft Windows.

Otras características

  • Wget soporta descargas a través de proxies, los cuales son ampliamente desplegados para proporcionar acceso web dentro de cortafuegos de empresas y al caché y rápidamente entregar contenido de frecuencia de acceso.
  • Hace uso de conexiones persistentes de HTTP donde están disponibles.
  • Soporte de IPv6 en sistemas que incluyen los interfaces apropiados.
  • SSL/TLS es soportado para cifrado de descarga usando la biblioteca OpenSSL.
  • Archivos más grandes a 2 Gb son soportados en sistemas de 32 bits que incluyan los interfaces apropiados.
  • La velocidad de descarga puede ser limitada para evitar consumir toda el ancho de banda disponible.

Resumen de la Linea de comandos

-h,--help

Muestra un resumen de los argumentos de la línea de comandos

-b, --background

Ejecuta el wget en segundo plano.

-o logfile, --output-file=logfile

Audita los mensajes que van a stderr en un fichero.

-a logfile, --append-output=logfile

Añade los mensajes auditados al fichero logfile

-q, --quiet

Modo silencioso. Inhibe la salida.

-nv, --non-verbose

Inhibe la salida, excepto los mensajes que van a stderr

-i file, --input-file=file

Lee las URLs del fichero file.Notese que ha de ser una lista de URLs, en caso de que sea un fichero HTML hay que usar la opción -F,-force-html Si los enlaces del fichero HTML son relativos. emplee la opción --base=url.

-t numero, --tries numero

Número de reintentos a la hora de descargar un fichero. 0 o inf para seleccionar infinitos

-nc, --no-clobber

En caso de bajar mismo fichero dos veces si -nc está activado, no se bajará de nuevo, si no está activado, se bajará de nuevo añadiendo un sufijo numérico (ej: file.1,file.2..)

-c, --continue

Reanuda la descarga de un fichero parcialmente descargado.Si el servidor no soporta la reanudación, wget no hace nada si -c está activada, si no lo está se bajara el fichero añadiendo el sufijo numérico (file.1)

--spider

wget se comporta como un web-spider, esto significa que wget sólo comprobará si los enlaces existen.Útil para comprobar los bookmarks, ejemplo: wget --spider --force-html -i bookmarks.html

-w segundos, --wait segundos

Espera el número de segundos especificados entre dos peticiones. Se puede

especificar en minutos, horas y dias añadiendo los sufijos m, h y d respectivamente.

--waitretry=seconds

Utilice esta opción si sólo desea que haya una espera entre reintentos debidos a fallos durante las descargas, se esperan de 1 a los segundos especificados incrementando 1 segundo mas de espera en cada reintento.

-Q quota, --quota=quota

Establece un tamaño maximo para las descargas _programadas_, especificado en bytes por defecto se pueden usar los sufijos k (kilobytes) o m (Megabytes).

-nd, --no-directories

No crea la jerarquía de directorios

-x, --force-directories

Fuerza la creación de la jerarquía de directorios. Ej: wget -x http://fly.srk.fer.hr/robots.txt se guardará en fly.srk.fer.hr/robots.txt.

-nH, --no-host-directories

Deshabilita la creacion de los directorios prefijados en el host.

--cut-dirs=number

Ignora number de subdirectorios.
Ejemplo: URL ftp://ftp.xemacs.org/pub/xemacs/
No options - ftp.xemacs.org/pub/xemacs/
-nH - pub/xemacs/
-nH --cut-dirs=1 - xemacs/
-nH --cut-dirs=2 - .

-P prefix, --directory-prefix=prefix

Establece un subdirectorio a partir del cual se descargarán los ficheros.

-E, --html-extension

Cuando el tipo de un fichero es text/html se le añade el sufijo .html Esto es util para bajar .cgi o .asp y poder verlos de forma local. Ej: file.cgi?25 =file.cgi?25.html

-r, --recursive

Activa el modo recursivo

-l profundidad, --level profundidad

Especifica el nivel de profundidad máximo en el modo recursivo.(Def:5)

--delete-after

wgets borra el fichero una vez bajado, esto sirve para mantener actualizadas las páginas de un proxy más visitadas.

-k, --convert-links

Convierte los links de una página descargada de forma que si el recurso enlazado ha sido descargado se accede a el de forma local, si no es descargado wget lo enlaza al recurso original.

-K. --backup-converted

Cuando se hace una conversión, se hace una copia de serguridad del original añadiéndosele el sufijo .orig

-m, --mirror

Opción para realizar mirrors. Equivale a -r -N -l inf -nr

-p, --page-requisites

Esta opción hace que wget se baje todos los recursos necesarios para una correcta visión del fichero HTML(imágenes,sonidos,CSS...) Descarga las páginas de forma parecida al Internet Explorer. Si la página contiene frames, hay que utilizar además las opciones -r -l 1

-A acclist --accept acclist, -R rejlist --reject rejlist,

Acepta o rechaza listas separadas por comas de nombres de ficheros, sufijos o patrones.

-L, --relative

Wget sigue sólo los enlaces que sean relativos. Útil cuando se quiere descargar sólo los recursos locales dentro del mismo host.

-np, --no-parent

No asciende a directorios padres dentro de la jerarquía cuando se descarga de forma recursica. Útil cuando se quiere descargar a partir de un cierto nivel. ej: URL http://www.gnu.org/downloads/ si en downloads/index.html se hiciera referencia a ../index.html, no se descargaría ese fichero html.

Ficheros de Configuración

Los ficheros de configuración sirven para personalizar algunas opciones del wget de forma que no necesitemos introducirlas por línea de comandos.

   ~/.wgetrc             = Configuración personal de un usuario
   /usr/local/etc/wgetrc = Configuración Global
   /etc/wgetrc           = Configuración Global (en algunas distribuciones)

Lo usual, si eres un usuario normal, es que copies el fichero de configuración global a tu directorio home y lo edites completándolo con tus preferencias

Algunas opciones interesantes que podemos encontrar:

  1. Numero de reintentos a la hora de descargar un fichero.
tries = 20
  1. Profundidad máxima en modo recursivo
reclevel = 5
  1. tiempo de espera entre intentos (incremento lineal, espera
  2. 1s primer intento,2s segundo intento ... )
waitretry = 10
  1. añadir cabeceras http ej:
header = From: tu nombre
header = Accept-Language: es
  1. Crear estructura de directorios aun obteniendo un único fichero.
dirstrcut= off
  1. Modo recursivo de forma automática
recursive = off
  1. Crear un backup de los ficheros a los que se les aplica conversion (-k)
  2. Equivale a activar -K
backup_converted= off
  1. Seguir por defecto los enlaces a ftps en ficheros HTML
follow_ftp = off

Usando Wget

El uso típico de GNU Wget consiste en invocar desde la línea de comandos una o más URL como argumentos:

Basico

# Descarga del título de página ejemplo.com a un archivo
# llamado "index.html".
wget http://www.ejemplo.com/
# Descarga desde el código fuente con Wget de un sitio GNU ftp.
wget ftp://ftp.gnu.org/pub/gnu/wget/wget-1.10.2.tar.gz

El uso más complejo incluye descargas automáticas desde múltiples URLs en un directorio con jerarquía:

# Descarga del título de página ejemplo.com , acompañado con
# las imágenes y el ''estilo de cascada'' (css) necesario para mostrar la página, y convertir las
# URLs dentro para referirse a los contenidos disponibles a nivel local.
wget -p -k http://www.ejemplo.com/
# Descarga de todo el contenido de ejemplo.com
wget -r -l 0 http://www.example.com/

Avanzado

# Descargar un espejo de las erratas (errores) para un libro que usted/tú justo compró.
# Seguir todos los enlaces locales recursivamente y hacer apropiados los archivos
# para verlos desconectado.
# Usar una espera arbitraria (al azar) de 0 a 5 segundos entre los archivos.
# Cuando hay un fracaso, reintentar hasta 7 veces con 14 segundos 
# entre cada reintento.
# Poner al agente de usuario a Firefox en Windows XP e ignorar exclusiones.
# Recoger resultados de acceso al archivo local "myLog.log"
wget -t 7 -w 5 --waitretry=14 --random-wait --user-agent="Mozilla/5.0 
     (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 
      Firefox/1.5.0.1" -m -k -K -e robots=off 
      http://www.oreilly.com/catalog/upt3/errata/ -o ./myLog.log
# Recoger sólo los enlaces específicos listados linea a linea en 
# el archivo local "my_movies.txt" 
# Usar una espera arbitraria de 0 a 33 segundos entre archivos.
# Cuando hay un fracaso, reintente para hasta 22 veces con 48 segundos 
# entre cada reintento. No envíe ningún agente de usuario en absoluto. Ignore exclusiones de robot.
# Colocar todos los archivos capturados en el directorio "/movies" 
# y recoger los resultados de acceso al archivo local "my_movies.log"
# Bueno sólo para descargar imágenes específicas conocidas u otros archivos.
wget -t 22 --waitretry=48 --wait=33 --random-wait --user-agent=""
     -e robots=off -o ./my_movies.log -P/movies -i ./my_movies.txt
#Usando wget para descargar contenido protegido por referer y cookies.
# obtener la url base y guardar sus cookies en el archivo 
# obtener el contenido protegido usando cookies almacenadas 
wget --cookies=on --keep-session-cookies --save-cookies=cookie.txt http://first_page
wget --referer=http://first_page --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://second_page
#Sitio web espejo a una copia estática para un navegador local.
#Esto quiere decir que todos los enlaces serán cambiados para apuntar a los archivos locales.
#Nota --html-extension convertirá cualquier archivo CGI, ASP O PHP generado a HTML (o algo más no .html).
wget --mirror -w 2 -p --html-extension --convert-links -P <dir> http://www.yourdomain.com

Extremo

# Bbusca archivos de música mp3 desde una lista de sitios que previamente hayas definido en sitiosmp3.txt, 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.

Referencias

  1. Gwget (en inglés).
  2. wGetGUI (en inglés).
  3. VisualWget (en inglés).
  4. Wget para Mac OS X (en inglés).

Enlaces externos