Wget – La navaja suiza de la descarga para mirroring y transferencias en línea de comandos
Descripción del programa Wget
GNU Wget es una utilidad gratuita para la descarga no interactiva de archivos desde la web, considerada una de las herramientas más versátiles y robustas en el ecosistema Unix/Linux. Desarrollada originalmente por Hrvoje Nikšić y actualmente mantenida por la comunidad GNU, su función principal es transferir archivos mediante los protocolos HTTP, HTTPS y FTP, con la capacidad de trabajar en segundo plano, reanudar descargas interrumpidas y seguir enlaces recursivamente para crear copias locales completas de sitios web.
Cabe destacar que su principal ventaja es su naturaleza no interactiva y su capacidad de funcionar en entornos sin supervisión. A diferencia de los navegadores web, que requieren la presencia constante del usuario, Wget puede iniciarse desde un script o un cron job y continuar trabajando incluso después de que el usuario cierre la sesión. Esto lo convierte en la herramienta ideal para automatizar copias de seguridad de sitios web, descargar grandes volúmenes de datos o mantener espejos locales actualizados.
El desarrollo de Wget comenzó a mediados de la década de 1990 y se ha mantenido activo hasta la actualidad. La versión más reciente estable es la 1.25.0, publicada en enero de 2025, aunque existe también Wget2 (versión 2.2.0), una reescritura moderna con soporte para HTTP/2, conexiones múltiples y mayor velocidad.
Wget está disponible en prácticamente todas las distribuciones Linux y sistemas Unix-like por defecto, y también puede instalarse en Windows a través de paquetes como Cygwin, MSYS2 o mediante los binarios nativos de GnuWin32.
¿Necesitas automatizar descargas, mantener un espejo actualizado de un sitio web o transferir grandes volúmenes de datos sin atarte a una interfaz gráfica?
Características clave de Wget
1. Descarga recursiva y mirroring de sitios web
La funcionalidad estrella de Wget es su capacidad para descargar sitios web completos de forma recursiva. Utilizando las opciones --mirror (o -m) y --recursive (o -r), el programa sigue todos los enlaces internos del sitio, descarga los recursos asociados (imágenes, hojas de estilo, scripts) y preserva la estructura de directorios original. El resultado es un espejo local completamente funcional que puede navegarse sin conexión.
2. Reanudación de descargas y robustez ante fallos
Wget está diseñado para redes lentas o inestables. La opción --continue (o -c) permite reanudar una descarga interrumpida desde el punto donde se quedó, siempre que el servidor soporte descargas parciales. Además, los parámetros --tries (número de reintentos) y --timeout (tiempo de espera) aseguran que la transferencia se complete incluso en condiciones adversas. Si el servidor rechaza la conexión, la opción --retry-connrefused fuerza a Wget a seguir intentándolo.
3. Conversión de enlaces para navegación offline
Una de las características más valoradas para el mirroring es --convert-links (o -k). Esta opción reescribe los enlaces dentro de los archivos HTML descargados para que apunten a las copias locales en lugar de a las URLs originales. Al activar esta opción, puedes navegar por el sitio espejo haciendo clic en los enlaces como si estuvieras online, sin necesidad de conexión a Internet. Para sitios que sirven páginas con extensiones no estándar (como .cgi o .php), la opción --html-extension (o -E) añade la extensión .html a los archivos descargados.
4. Limitación de ancho de banda y control de velocidad
Para no saturar la conexión ni sobrecargar los servidores, Wget incluye opciones de control de velocidad. --limit-rate=RATE permite especificar una velocidad máxima de descarga, por ejemplo --limit-rate=500k para 500 kilobytes por segundo. La opción --wait (o -w) añade una pausa entre solicitudes, y --random-wait introduce variabilidad para evitar patrones detectables. Estas características son esenciales cuando se descargan grandes volúmenes de datos y se quiere ser respetuoso con el servidor.
5. Autenticación, cabeceras personalizadas y soporte para robots.txt
Wget puede manejar sitios con autenticación mediante las opciones --user y --password. También permite personalizar el User-Agent con --user-agent para imitar un navegador si el sitio bloquea la identificación de Wget. Por defecto, respeta las directivas de robots.txt, pero esto puede desactivarse con -e robots=off si es necesario. Además, se pueden añadir cabeceras HTTP personalizadas con --header, como --header="accept-encoding: gzip" para habilitar compresión y ahorrar ancho de banda.
Explicación detallada de las funcionalidades
El funcionamiento de Wget se basa en una arquitectura de descarga simple pero extremadamente flexible. Cuando se invoca con una URL, el programa establece una conexión con el servidor, negocia la transferencia y guarda el contenido en un archivo local.
En modo recursivo (-r), Wget analiza el HTML descargado, extrae todos los enlaces a otras páginas y recursos, y los añade a una cola de descarga. Este proceso se repite hasta alcanzar la profundidad máxima especificada (por defecto 5 niveles) o hasta que no queden más enlaces dentro del dominio permitido.
El sistema de opciones de Wget permite un control muy fino sobre cada aspecto de la descarga.
Por ejemplo, para crear un espejo offline completo, se utiliza la combinación --mirror --convert-links --adjust-extension --page-requisites --no-parent. --mirror es un alias que agrupa -r -l inf -N (recursivo sin límite de profundidad y con timestamping). --page-requisites descarga todos los recursos necesarios para mostrar cada página (imágenes, CSS, JavaScript). --no-parent evita que Wget suba a directorios superiores al de la URL base.
Otra funcionalidad avanzada es la capacidad de leer URLs desde un archivo de entrada con -i archivo.txt, lo que permite automatizar la descarga de largas listas de archivos.
También soporta la expansión de llaves en la propia URL, por ejemplo https://ejemplo.com/imagenes/{1..100}.jpg descargaría 100 imágenes con nombres secuenciales.
Para descargas en segundo plano, -b envía Wget al background y escribe la salida en wget-log, y se puede monitorizar el progreso con tail -f wget-log.
Descarga e instalación de Wget
- Página oficial: gnu.org/software/wget
- Versión actual: 1.25.0 (enero de 2025) / Wget2 2.2.0
- Últimas versiones: 1.25.0 (2025), 1.24.5 (2024), 1.21.4 (2023)
- Tamaño: Aproximadamente 1-2 MB (ejecutable base)
- Sistemas operativos compatibles: Linux, BSD, macOS, Windows (Cygwin/MSYS2/GnuWin32), Unix-like
- Requisitos mínimos: Ninguno específico; funciona en cualquier sistema con soporte de red
- Licencia: GNU General Public License v3 (código abierto, completamente gratuito)
- Idiomas: Inglés (interfaz de línea de comandos)
- Soporte técnico: Listas de correo de GNU, documentación oficial (
man wget)
Cómo usar Wget
El uso básico de Wget es tan simple como escribir wget https://ejemplo.com/archivo.zip en la terminal. El programa descargará el archivo en el directorio actual con el mismo nombre que en el servidor.
Para cambiar el nombre de salida, se utiliza -O nombre.zip. Para guardar en un directorio específico, -P /ruta/destino. La opción -c permite reanudar una descarga parcialmente completada, lo que es muy útil para archivos grandes.
Para crear un espejo de un sitio web completo, el comando más completo y recomendado es:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://ejemplo.comExplicación de cada opción:
--mirror(o-m): Activa el modo espejo (recursivo con timestamping y profundidad infinita)--convert-links(o-k): Convierte los enlaces para que apunten a los archivos locales--adjust-extension(o-E): Añade extensión.htmla los archivos que la necesiten--page-requisites(o-p): Descarga todos los recursos (CSS, JS, imágenes) necesarios para mostrar cada página--no-parent(o-np): No sube al directorio padre, limitando la descarga al árbol del sitio
Si el sitio es grande y quieres ser respetuoso con el servidor, añade --wait 2 --limit-rate=500k para esperar 2 segundos entre solicitudes y limitar la velocidad a 500 KB/s. Para ignorar robots.txt (si el sitio lo bloquea), añade -e robots=off. Si el sitio requiere autenticación, incluye --user=usuario --password=contraseña.
Para descargar una lista de URLs desde un archivo, crea un archivo urls.txt con una URL por línea y ejecuta wget -i urls.txt. Para descargar en segundo plano, usa wget -b https://ejemplo.com/archivo.zip y monitoriza con tail -f wget-log.
Un truco práctico: si quieres limitar la profundidad del rastreo recursivo, usa -l 2 para solo dos niveles de enlaces. Si necesitas incluir enlaces a otros dominios (por ejemplo, un CDN de imágenes), añade -H -D dominio-cdn.com.
Observaciones sobre el programa Wget
Frente a herramientas gráficas como HTTrack, Wget destaca por su presencia ubicua en sistemas Unix/Linux y su facilidad para ser automatizado. Está preinstalado en prácticamente todas las distribuciones Linux y en macOS, y puede ejecutarse desde scripts, cron jobs o entornos CI/CD sin necesidad de intervención manual. Para los administradores de sistemas y desarrolladores, esta capacidad de integración es invaluable.
En términos prácticos, el mayor beneficio para el usuario final es la robustez ante fallos de red. Wget reintenta automáticamente las descargas fallidas, puede reanudarlas desde donde se interrumpieron, y funciona en segundo plano incluso después de cerrar la terminal. Para descargar grandes volúmenes de datos a través de conexiones inestables, no hay mejor herramienta.
El desarrollador original de Wget es Hrvoje Nikšić, quien creó el programa a mediados de los 90 mientras estudiaba en la Universidad de Zagreb. Posteriormente, el proyecto fue mantenido por Dan Harkless, y actualmente es parte del proyecto GNU, con contribuciones de una comunidad global de desarrolladores. Wget2 es una reescritura moderna liderada por Tim Rühsen y Darshit Shah, que añade soporte para HTTP/2, conexiones múltiples y mayor eficiencia.
Las actualizaciones de Wget son periódicas pero no excesivamente frecuentes. La versión 1.25.0 se publicó en enero de 2025, y las versiones anteriores (1.24.5, 1.24.4) se lanzaron en 2024. Esto refleja un proyecto maduro que no necesita cambios constantes, pero que sigue recibiendo correcciones de seguridad y mejoras de compatibilidad.
Wget no requiere instalación en la mayoría de sistemas Linux y macOS. En Windows, se puede instalar a través de gestores de paquetes como winget install -e --id GNU.Wget2 (para Wget2), Chocolatey (choco install wget) o mediante la instalación de Git for Windows, que incluye Wget en su paquete. También existen versiones portátiles que pueden ejecutarse desde un pendrive sin instalación.
Entre las funcionalidades extra, cabe destacar que Wget soporta la creación de archivos WARC (Web ARChive), un formato estándar para el archivado web utilizado por bibliotecas nacionales y proyectos como Archive.org.
La opción --warc-file=nombre guarda toda la descarga en un archivo WARC que preserva la estructura original del sitio y los metadatos de las transacciones HTTP. También incluye soporte para Lua scripting en versiones compiladas con esa característica, lo que permite un control granular sobre el comportamiento de descarga.
Limitaciones importantes
- ❌ No tiene interfaz gráfica nativa; requiere uso de terminal o scripts.
- ❌ En Windows, la instalación no es tan sencilla como en Linux (requiere emuladores o paquetes adicionales).
- ❌ Los sitios con contenido dinámico pesado (JavaScript que carga datos asíncronamente) pueden no descargarse completamente.
Alternativa recomendada
Si prefieres una interfaz gráfica y estás en Windows, la alternativa más directa es HTTrack Website Copier. HTTrack ofrece un asistente paso a paso que guía al usuario en la configuración de la descarga, con opciones similares a las de Wget pero presentadas en una interfaz visual. Es ideal para usuarios que no se sienten cómodos con la línea de comandos o para descargas puntuales sin necesidad de automatización.
HTTrack tiene como principal ventaja la facilidad de uso y la disponibilidad de versiones para Windows, macOS y Linux con interfaz gráfica. La desventaja es que no es tan fácil de automatizar como Wget y no está preinstalado en la mayoría de sistemas. Para la mayoría de los administradores de sistemas y desarrolladores, Wget sigue siendo la opción más potente y flexible. Para usuarios domésticos que solo quieren descargar un sitio web de forma ocasional, HTTrack es una alternativa más accesible.
Sección FAQ
¿Wget es gratis o de pago?
Wget es completamente gratuito y de código abierto bajo la licencia GNU GPL. No tiene versiones de pago ni funciones bloqueadas. Puedes usarlo libremente para cualquier propósito, personal o comercial, sin costo alguno.
¿Funciona en Windows, Mac y Linux?
Wget está disponible para Linux y sistemas Unix-like (incluyendo macOS) por defecto. En Windows, se puede instalar a través de Cygwin, MSYS2, Git for Windows o mediante los binarios nativos de GnuWin32. También existe Wget2 para Windows que se puede instalar con winget install -e --id GNU.Wget2.
¿Qué diferencia a Wget de curl?
La diferencia principal es el enfoque. Wget está optimizado para descargas recursivas y mirroring de sitios web, con opciones específicas como --mirror, --convert-links y --page-requisites. curl es más versátil para interactuar con APIs y soporta más protocolos, pero no tiene capacidades de rastreo recursivo integradas. Para descargar un sitio web completo, Wget es la herramienta adecuada; para enviar datos a una API, curl es mejor.
¿Puedo usar Wget para descargar sitios web con contraseña?
Sí, Wget soporta autenticación HTTP básica mediante --user=usuario --password=contraseña. También soporta cookies, por lo que puede funcionar con sitios que requieren inicio de sesión mediante formularios si se guardan las cookies con --save-cookies y se cargan con --load-cookies.
¿Por qué mi sitio descargado no se ve igual que el original?
Esto puede deberse a que el sitio utiliza tecnologías que Wget no puede capturar completamente, como aplicaciones JavaScript muy dinámicas (frameworks como React o Angular con renderizado del lado del cliente), contenido cargado mediante AJAX después de la carga inicial, o fuentes web alojadas en CDNs externos excluidos de la descarga.
Para mejorar el resultado, asegúrate de incluir --page-requisites para descargar CSS y JS, y añade -H -D dominio-cdn.com para incluir recursos de otros dominios. Para sitios muy dinámicos, considera usar herramientas como Browsertrix Crawler o SingleFile, que capturan el estado después de ejecutar el JavaScript.
