Como usar WGET para tus descargas bajo linux
------------------------------------------------------------------------------
By NaTaSaB (jmmerlos @ merlos . org http://merlos.org)
version: 0.8
Ultima actualización: Ago 2002
Publicado: Ago 2002
Indice
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Objetivos
¿Qué es?
Ejemplos de Utilización
Resumen Línea de comandos
Ficheros de Configuración
APENDICE 1 - wget --help
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Objetivos
------------------------------------------------------------------------------
En este tutorial se pretende inicializar a los usuarios en el manejo del
gestor de descargas wget con ejemplos pácticos y de forma clara y sencilla.
Este texto se distribuye bajo licencia GNU General Public License.
¿Qué es?
------------------------------------------------------------------------------
WGET es una completa utilidad GNU para Linux que trabaja en modo textual
y que sirve para bajar ficheros usando los protocolos HTTP y FTP.
Está incluido en todas las distribuciones y también dispone de una
interfaz gráfica, 'gwget' (http://gwget.sourceforge.net).
wget está extensamente documentado en su página del manual
man wget
En este tutorial se mostrarán algunos ejemplos de como manejar wget como
gestor de descargas bajo Linux.
Ejemplos de utilización
------------------------------------------------------------------------------
wget tiene una versátil y extensa línea de comandos, esto puede hacer que al
principio nos perdamos, tan sólo hay que memorizar unos cuantos comandos.
Para descargar una página sólo tenemos que poner wget URL:
$ wget http://localhost/~natasab/
Si queremos guardar una página al estilo Internet Explorer, esto es,
incluyendo imágenes, sonidos, CSS... utilizaremos el argumento -p
$ wget -p http://localhost/~natasab/
El fichero index.html se encontrará en ./localhost/%7Enatasab/ Esto es porque
wget crea la jerarquia de directorios dominio/subdirectorios/ficheros
por defecto. Es decir, si ejecutamos
wget -p http://www.google.com
Nos creará el directorio ./www.google.com. Para evitar esto, podemos usar
los siguientes modificadores:
bash-2.05$ wget -p -nH --cut-dirs=1 http://localhost/~natasab/
...
bash-2.05$ ls
img index.html main.css
bash-2.05$
-nH hace que no se cree el subdirectorio localhost ( o www.google.com)
y --cut-dirs=n elimina n número de directorios dentro de la jerarquia,
en el ejemplo pusimos 1, por tanto no se crea el directorio %7Enatasab.
Veamos, el ejemplo de la página del manual del wget. Supongamos que
queremos descargar el xemacs que se encuentra en
ftp://ftp.xemacs.org/pub/xemacs/
En función de los argumentos que le demos a wget se descargaría según la
siguiente tabla:
No options - ftp.xemacs.org/pub/xemacs/
-nH - pub/xemacs/
-nH --cut-dirs=1 - xemacs/
-nH --cut-dirs=2 - .
--cut-dirs=1 - ftp.xemacs.org/xemacs/
...
Para descargar todos los ficheros que se encuentran en el directorio
pub/xemacs del ftp anterior podemos usar la opción -r o --recursive, esta
opción funciona de forma similar a las de los comandos ls o rm.
Si queremos especificar una profundidad de directorios en la recursividad
podemos emplear el modificador -l profundidad, por defecto se toma -l 5
Si se trata de un fichero HTML la profundidad se refiere en cuanto a seguir
los enlaces.
wget -r -nH ftp.xemacs.org/pub/xemacs/
En algunas páginas (sobre todo de mp3) en lugar de establecer enlaces en el
propio fichero HTML ofrecen un fichero con las direcciones URL. Para bajar
los recursos contenidos en ese fichero sólo tendremos que utilizar la
opción -i
$ wget -i http://www.servidor.com/cuenta/fichero.con.urls
Si por el contrario es una página HTML que contiene enlaces a ficheros
que nos interesa tendremos que forzar a wget a que busque enlaces:
$ wget -r -l 1 -np -f -i http://www.gnu.org/downloads/emacs.html
La opción -np (--no-parent) dice a wget que no descargue ficheros que se
encuentran en un nivel inferior dentro de la jerarquía de directorios,
por ejemplo, no se descargaría http://www.gnu.org/index.html, aunque este
fuera referenciado dentro de emacs.html
También puede suceder que el fichero con la lista de URL contenga los
volumenes de un fichero grande y dado si uno de estos volúmenes no existe
no nos interese descargar el resto de ficheros, ya que sería una pérdida
de tiempo al no poder recuperar el fichero "grande". Para realizar este
chequeo podemos utilizar la opción --spider
Ejemplo:
Contenido de 'fichero':
http://localhost/~natasab/img/cp.png
http://localhost/~natasab/img/cp1.png
http://localhost/~natasab/img/cp2.png
http://localhost/~natasab/img/cp3.png
http://localhost/~natasab/img/cp4.png
que conforman los volúmenes de un fichero cp.tar.gz, si nos falta alguno de
estos volúmenes no podremos recuperar el contenido del zip :-(
Veamos si hay suerte:
bash-2.05$ wget -nv --spider -i fichero
200 OK
http://localhost/%7Enatasab/img/cp1.png:
18:18:00 ERROR 404: Not Found.
http://localhost/%7Enatasab/img/cp2.png:
18:18:00 ERROR 404: Not Found.
http://localhost/%7Enatasab/img/cp3.png:
18:18:00 ERROR 404: Not Found.
http://localhost/%7Enatasab/img/cp4.png:
18:18:00 ERROR 404: Not Found.
bash-2.05$
La opción -nv (--non-verbose) la veremos más adelante, sólo adelantar
que sirve para mostrar menos información por stdout.
Sigamos con nuestras descargas, ahora supongamos que hemos encontrado una
página con mucha documentación, almacenada en ficheros con extensión .pdf,
.zip y .tar.gz. Si sólo queremos bajar ficheros con esa extension.
$wget -nH -r -A pdf,zip,tar.gz -f -i http://www.linuxdoc.org/howto/
La nueva opción introducida ha sido -A lista-patrones-separada-por-comas
Otro ejemplo sería:
wget -r -A s*.png -np -nH --cut-dir=2 http://localhost/~natasab/img -nv
Recapitulando las opciones:
-r modo recursivo
-A lista-patrones-separada-por-comas Patron de ficheros que se descargarán
-np no descargar directorios de orden inferior.
-nH no crear el directorio con el nombre del host
-cut-dirs=2 no crear 2 niveles de los directorios (~natasab/img)
-nv Modo no imformativo (para que muestre menos información)
Wget genera mucha información en la salida estandar por defecto:
bash-2.05$ wget http://localhost
--17:35:09-- http://localhost/
= `index.html'
Conectando con localhost:80... ¡Conectado!
Petición HTTP enviada, esperando respuesta... 302 Found
Localización: ~natasab [siguiendo]
--17:35:09-- http://localhost/%7Enatasab
= `~natasab'
Conectando con localhost:80... ¡Conectado!
Petición HTTP enviada, esperando respuesta... 301 Moved Permanently
Localización: http://192.168.0.3/~natasab/ [siguiendo]
--17:35:09-- http://192.168.0.3/%7Enatasab/
= `index.html'
Conectando con 192.168.0.3:80... ¡Conectado!
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: no especificado [text/html]
0K
17:35:09 (833.01 KB/s) - `index.html' guardado [853]
bash-2.05$
Vemos la cantidad de información que ha generado y tan sólo se ha
bajado un fichero de 853 bytes. Tal vez esto no nos interese.
Básicamente tenemos dos opciones para evitar tanto mensaje:
-q (modo silencioso)
-nv (Modo no informativo)
Veamos los resultados:
bash-2.05$ wget -nv http://localhost
17:38:32 URL:http://192.168.0.3/%7Enatasab/ [853] - "index.html.1" [1]
bash-2.05$ wget -q http://localhost
bash-2.05$ ls
index.html index.html.1 index.html.2
bash-2.05$
Como se puede obervar, wget si no se especifica lo contrario si el fichero
existe, es decir, se ha bajado ya, crea uno con el mismo nombre y le añade
el sufijo .numero. Para que no vuelva a bajar los ficheros puedes usar la
opcion -nc
Resumen de la Linea de comandos
----------------------------------------------------------------------------
En esta sección sólo se verán los comandos más interesantes, para ver
la lista completa vaya al Apéndice 1
-h,--help
Muestra un resumen de los argumentos de la línea de comandos (Apéndice 1)
-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 compro-
bará 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 actuali-
zadas 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. Util 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 configura-
ción global a tu directorio home y lo edites completandolo con tus
preferencias
Algunas opciones interesantes que podemos encontrar:
# Numero de reintentos a la hora de descargar un fichero.
tries = 20
# Profundidad máxima en modo recursivo
reclevel = 5
# tiempo de espera entre intentos (incremento lineal, espera
# 1s primer intento,2s segundo intento ... )
waitretry = 10
# añadir cabeceras http ej:
header = From: tu nombre
header = Accept-Language: es
# Crear estructura de directorios aun obteniendo un único fichero.
dirstrcut= off
# Modo recursivo de forma automática
recursive = off
# Crear un backup de los ficheros a los que se les aplica conversion (-k)
# Equivale a activar -K
backup_converted= off
# Seguir por defecto los enlaces a ftps en ficheros HTML
follow_ftp = off
APENDICE 1
------------------------------------------------------------------------------
Resumen Linea de Comandos ( obtenida via wget --help)
GNU Wget 1.7, un recuperador por red no interactivo.
Modo de empleo: wget [OPCIÓN]... [URL]...
Los argumentos obligatorios para las opciones largas son también obligatorios
para las opciones cortas.
Inicio:
-V, --version muestra la versión de wget y termina.
-h, --help muestra esta ayuda.
-b, --background pasa a segundo plano al iniciar.
-e, --execute=ORDEN ejecuta una orden como las de `.wgetrc'.
Fichero de entrada y registro:
-o, --output-file=FICHERO registra los mensajes en FICHERO.
-a, --append-output=FICHERO añade los mensajes a FICHERO.
-d, --debug imprime la salida de depurado.
-q, --quiet modo silencioso (no muestra ninguna salida).
-v, --verbose modo informativo (predeterminado).
-nv, --non-verbose muestra el mínimo necesario de información.
-i, --input-file=FICHERO descarga las URLs que haya en FICHERO.
-F, --force-html trata el fichero de entrada como HTML.
-B, --base=URL añade URL delante de los enlaces relativos
en el fichero -F -i.
--sslcertfile=FICHERO certificado opcional del cliente.
--sslcertkey=FICHERO llave opcional para este certificado.
Descarga:
--bind-address=DIRECCIÓN realiza un `bind' a la DIRECCIÓN
(máquina o IP)
en la máquina local.
-t, --tries=NÚMERO establece en NÚMERO el número de reintentos
(0 no pone límite).
-O, --output-document=FICHERO escribe los documentos en FICHERO.
-nc, --no-clobber no sobreescribe ficheros existentes.
-c, --continue continuar recuperando un fichero existente.
--dot-style=ESTILO establece el estilo de la pantalla de
recuperación.
-N, --timestamping no recupera ficheros más viejos que los
locales .
-S, --server-response imprime la respuesta del servidor.
--spider no recupera nada.
-T, --timeout=SEGUNDOS establece el tiempo de espera de lectura
en SEGUNDOS.
-w, --wait=SEGUNDOS espera SEGUNDOS entre recuperaciones.
--waitretry=SEGUNDOS espera 1...SEGUNDOS entre reintentos.
-Y, --proxy=on/off habilita/deshabilita el uso de proxies.
-Q, --quota=NÚMERO establece la cuota de recuperación en NÚMERO.
Directorios:
-nd --no-directories no crea directorios.
-x --force-directories fuerza la creación de directorios.
-nH, --no-host-directories no crea directorios en el anfitrión
-P, --directory-prefix=PREFIJO guarda ficheros en PREFIJO/...
--cut-dirs=NÚMERO descarta NÚMERO componentes del directorio
remoto.
Opciones de HTTP:
--http-user=USUARIO establece que el usuario de http es USUARIO.
--http-passwd=CLAVE utiliza CLAVE como contraseña de http.
-C, --cache=on/off (des)habilita la caché del servidor de datos.
(normalmente habilitada).
-E, --html-extension guarda todos los ficheros de texto/html con la
extensión .html.
--ignore-length pasa por alto el campo `Content-Length' de la
cabecera.
--header=TEXTO inserta el TEXTO entre las cabeceras.
--proxy-user=USUARIO establece que el usuario del proxy es USUARIO.
--proxy-passwd=CLAVE utiliza CLAVE como contraseña del proxy.
--referer=URL incluye la cabecera `Referer: URL' en la petición
HTTP.
-s, --save-headers guarda las cabeceras de HTTP en un fichero.
-U, --user-agent=AGENTE wget se identifica como AGENTE en vez de
Wget/VERSIÓN.
--no-http-keep-alive deshabilita las conexiones persistentes de HTTP.
--cookies=off no utiliza cookies.
--load-cookies=FICH. carga las cookies desde FICH. antes de la sesión.
--save-cookies=FICH. guarda las cookies en FICH. tras la sesión.
Opciones de FTP:
-nr, --dont-remove-listing no elimina los ficheros `.listing'.
-g, --glob=on/off habilita/deshabilita el uso de comodines en ficheros.
--passive-ftp usa el método de trasferencia "pasivo".
--retr-symlinks al descender por los directorios, recupera los
ficheros a los que apunta un enlace
(no los directorios).
Recuperación recursiva:
-r, --recursive succionado de web recursivo, ¡utilícelo con cuidado!
-l, --level=NÚMERO profundidad máxima de recursión (0=ilimitada)
--delete-after borra los ficheros locales una vez descargados.
-k, --convert-links convierte los enlaces no relativos en relativos.
-K, --backup-converted antes de transformar el fichero X, hace una copia
X.orig.
-m, --mirror atajo equivalente a -r -N -l inf -nr.
-p, --page-requisites descarga todas las imágenes, etc. necesarias para
mostrar la página HTML.
Aceptar/rechazar recursivo:
-A, --accept=LISTA lista, separada por comas, de extensiones aceptadas.
-R, --reject=LISTA lista, separada por comas, de extensiones rechazadas.
-D, --domains=LISTA lista, separada por comas, de dominios aceptados.
--exclude-domains=LISTA lista de dominios rechazados, separados
por comas.
--follow-ftp sigue enlaces a FTP desde documentos HTML.
--follow-tags=LISTA lista de etiquetas HTML a las que se sigue.
-G, --ignore-tags=LISTA lista de etiquetas HTML a las que se ignorará.
-H, --span-hosts ir a anfitriones distintos en la recursión.
-L, --relative sigue sólo enlaces relativos.
-I, --include-directories=LISTA lista de directorios permitidos.
-X, --exclude-directories=LISTA lista de directorios excluidos.
-nh, --no-host-lookup no busca el nombre DNS de los anfitriones.
-np, --no-parent no asciende al directorio padre.
Envíe información sobre errores y sugerencias a .
-------------------------------------------------------------------------------
- EOF -
Escrito por NaTaSaB con jed & emacs
---===@===---
-------------------------------------------------------------------------------