Como usar WGET para tus descargas bajo linux ------------------------------------------------------------------------------ By NaTaSaB (natasab34@mail.ru # http://natasab.merlos.biz) 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 nombreheader = 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 ---===@===--- -------------------------------------------------------------------------------