Volver al blog
Guías
Gabriel CiociLast updated on Mar 31, 20268 min read

Descarga páginas web y archivos sin esfuerzo con Python y wget

Descarga páginas web y archivos sin esfuerzo con Python y wget

¿Estás cansado de descargar manualmente páginas web y archivos? ¿Te gustaría que hubiera una forma más fácil de obtener los datos que necesitas? ¡No busques más! En este artículo, te mostraré cómo utilizar Python y la herramienta de línea de comandos wget para automatizar el proceso.

En este artículo descubrirás cómo utilizar Python y wget para automatizar el proceso de descarga de la web, al tiempo que aprendes sobre las capacidades y limitaciones de wget, así como sobre herramientas alternativas para el web scraping.

¿Por qué Python?

Python es un lenguaje de programación potente y popular que se utiliza en diversos campos, como la automatización, la ciencia de datos y el desarrollo de aplicaciones. Es fácil de aprender y cuenta con una amplia biblioteca de módulos y marcos que amplían sus capacidades.

¿Por qué wget?

Wget es una herramienta de línea de comandos que permite descargar archivos de Internet. Está ampliamente disponible en la mayoría de los sistemas tipo Unix, incluidos Linux y macOS. Wget es una herramienta versátil que se puede utilizar para descargar archivos individuales, múltiples archivos e incluso directorios completos.

Estas son algunas de las principales características de wget:

  • Descarga de archivos de Internet: Wget se puede utilizar para descargar archivos de Internet, incluyendo páginas web, imágenes y otros tipos de archivos.
  • Opciones de descarga personalizables: Wget te permite especificar diversas opciones para personalizar tus descargas, como el directorio donde guardar el archivo, el nombre del archivo y si se deben sobrescribir los archivos existentes.
  • Reanudar descargas interrumpidas: si una descarga se interrumpe, wget puede reanudarla desde donde se quedó, ahorrando tiempo y ancho de banda.
  • Descarga recursiva: wget se puede utilizar para descargar un sitio web o un directorio completo siguiendo los enlaces de forma recursiva.
  • Compatibilidad con HTTP, HTTPS y FTP: Wget puede gestionar varios tipos de protocolos de Internet, incluidos HTTP, HTTPS y FTP, lo que lo convierte en una herramienta versátil para descargar desde diferentes tipos de servidores.
  • Disponible en la mayoría de sistemas tipo Unix: Wget está ampliamente disponible en la mayoría de sistemas tipo Unix, incluidos Linux y macOS, lo que facilita su uso en una gran variedad de plataformas.

¿Por qué usar wget con Python?

Python y wget se pueden combinar para automatizar el proceso de descarga de páginas web y archivos, lo que ahorra tiempo y esfuerzo. Wget se puede personalizar a través de Python, y las tareas de web scraping o descarga de archivos se pueden integrar en scripts de Python existentes.

Hay varias razones por las que se puede optar por utilizar wget con Python:

  • Automatización: Al utilizar wget con Python, puedes automatizar el proceso de descarga de archivos de Internet. Esto puede ahorrar tiempo y esfuerzo, especialmente si necesitas descargar un gran número de archivos o sitios web.
  • Personalización: Wget te permite especificar diversas opciones para personalizar tus descargas, como el directorio donde guardar el archivo, el nombre del archivo y si se deben sobrescribir los archivos existentes. Al utilizar wget con Python, puedes configurar estas opciones mediante programación y personalizar tus descargas según tus necesidades.
  • Facilidad de uso: Python es conocido por su simplicidad y legibilidad, lo que lo convierte en un lenguaje fácil de aprender y utilizar. Al utilizar wget con Python, puedes aprovechar la potencia de Python para facilitar las tareas de web scraping y descarga de archivos.
  • Escalabilidad: Python es un lenguaje escalable capaz de gestionar grandes cantidades de datos. Al utilizar wget con Python, puedes ampliar tus tareas de web scraping o descarga de archivos para gestionar conjuntos de datos más grandes.

Primeros pasos

Ahora que hemos hablado de las ventajas individuales y combinadas de Python y wget, pasemos a la parte de la escritura de código.

Instalación de wget

Asegúrate de que wget está instalado en tu ordenador. Si tu sistema operativo es Linux, ya lo tienes instalado.

  • Si eres usuario de Windows, puedes descargar el binario desde esta página. Asegúrate de añadir la ruta del binario a la variable de entorno PATH. Otra opción es utilizar WSL (Subsistema de Windows para Linux). Lee más al respecto aquí.
  • Si eres usuario de Mac, instala wget utilizando brew

No olvides consultar la extensa documentación de wget aquí.

Instalación de Python

Descarga la última versión de Python desde el sitio web oficial y sigue las instrucciones de instalación para tu plataforma. Una vez instalado, puedes comprobar la versión con este comando:

python3 --version

Ejecución de comandos del sistema en Python

El módulo `subprocess` de Python te permite ejecutar comandos del sistema y capturar su salida. Es una forma potente y flexible de interactuar con el sistema operativo desde tus scripts de Python.

Para utilizar el módulo `subprocess`, primero tendrás que importarlo a tu script de Python. A continuación, puedes utilizar la función `subprocess.run()` para ejecutar un comando del sistema y capturar su salida.

La función `run()` toma el comando que se va a ejecutar como una cadena y devuelve un objeto `CompletedProcess`, que contiene el código de salida, stdout y stderr del comando.

A continuación se muestra un ejemplo del uso de la función `subprocess.run()` para ejecutar el comando ls, que muestra los archivos de un directorio:

import subprocess

result = subprocess.run(['ls', '-l'])

print(result.stdout)

Ejecuta este código con el comando python3 main.py. El resultado debería ser similar a este.

total 4

-rw-r--r-- 1 dan dan 80 Jan 6 18:58 main.py

None

Descarga con wget

Descargar un archivo

Empecemos por descargar el logotipo de WebScrapingAPI. Sustituye la lista de argumentos por `wget` y la URL del logotipo. El comando tendrá este aspecto:

result = subprocess.run(['wget', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

El script devolverá el siguiente resultado:

--2023-01-06 19:06:32-- https://www.webscrapingapi.com/images/logo/logo-white.svg

Resolving www.webscrapingapi.com (www.webscrapingapi.com)... 76.76.21.61, 76.76.21.98

Connecting to www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 5391 (5.3K) [image/svg+xml]

Saving to: 'logo-white.svg'

logo-white.svg 100%[====================================================================================================================================================================>] 5.26K --.-KB/s in 0.06s

2023-01-06 19:06:33 (91.6 KB/s) - 'logo-white.svg' saved [5391/5391]

None

En el resultado, podemos ver cómo `wget` resuelve el nombre de dominio, se conecta al dominio, recibe un código de respuesta `200 OK`, determina la longitud del archivo (5,3 k) y comienza a guardar el archivo localmente con el nombre `logo-white.svg`.

Puedes buscar el archivo `logo-white.svg` en la carpeta del proyecto.

Descargar en un directorio

Puedes descargar el archivo en un directorio personalizado utilizando el indicador `-P`. Actualicemos el script y ejecutémoslo para ver los resultados:

result = subprocess.run(['wget', '-P', 'images', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

El resultado es casi el mismo, con la única diferencia de que el archivo se almacena en el directorio «./images/».

Configurar el nombre del archivo descargado

Con el indicador `-O`, puedes especificar un nuevo nombre para el archivo descargado. Probémoslo:

result = subprocess.run(['wget', '-O', 'named-logo.svg', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Busca el archivo `named-logo.svg` en la carpeta del proyecto.

Descargar el archivo si la versión remota es más reciente

Puedes usar la opción `-N` para descargar el archivo remoto solo si la versión es más reciente que la del archivo local. El comando tendrá este aspecto:

result = subprocess.run(['wget', '-N', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Reanudar descargas interrumpidas

Si se interrumpe una descarga, `wget` puede reanudarla desde donde se quedó, ahorrando tiempo y ancho de banda. Para ello, tendrás que utilizar el indicador `-c`, que le indica a `wget` que continúe una descarga interrumpida.

El comando tendrá este aspecto:

result = subprocess.run(['wget', '-c', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Si la descarga del archivo se completó, podrás ver en la salida el siguiente mensaje:

HTTP request sent, awaiting response... 416 Requested Range Not Satisfiable

The file is already fully retrieved; nothing to do.

Descarga recursiva

Wget se puede utilizar para descargar un sitio web o un directorio completo siguiendo los enlaces de forma recursiva. Para ello, debes utilizar los indicadores `-r` y `-l`: el indicador `-r` le indica a la herramienta que siga los enlaces de forma recursiva y el indicador `-l` especifica la profundidad máxima de la recursión.

result = subprocess.run(['wget', '-r', '-l', '2', 'https://www.webscrapingapi.com'])

Este comando descargará el sitio web «https://www.webscrapingapi.com» y seguirá los enlaces a otras páginas del mismo sitio web hasta una profundidad máxima de 2.

¿Cuándo wget no es la solución?

Hay varias situaciones en las que podría ser más adecuado utilizar curl, Beautiful Soup o Selenium en lugar de wget:

  • Cuando necesitas configurar encabezados HTTP o cookies: Curl te permite configurar encabezados HTTP y cookies, lo que puede resultar útil al interactuar con API o acceder a sitios web protegidos. `wget` no tiene esta capacidad.
  • Cuando necesitas analizar y extraer datos de HTML: Beautiful Soup es una biblioteca de Python que facilita el análisis y la extracción de datos de documentos HTML. wget no está diseñado para analizar y extraer datos de páginas web.
  • Cuando necesitas interactuar con un sitio web como usuario: Selenium es una herramienta que te permite automatizar el proceso de interactuar con un sitio web como usuario. Se puede utilizar para rellenar formularios, hacer clic en botones y realizar otras acciones que no son posibles con wget.

Conclusiones

Python y wget son potentes herramientas para automatizar el proceso de descarga de archivos y páginas web. Al utilizar wget con Python, puedes personalizar tus descargas, integrar tareas de web scraping o de descarga de archivos en tus scripts de Python existentes y ahorrar tiempo y esfuerzo.

Sin embargo, es importante respetar los términos de servicio de los sitios web de los que se descargan archivos y evitar sobrecargar los servidores.

Si buscas una alternativa a wget para el web scraping, considera utilizar WebScrapingAPI. WebScrapingAPI es un servicio profesional de web scraping que te permite extraer datos fácilmente de sitios web sin necesidad de crear y mantener tu propio scraper web.

Es una solución rápida, fiable y rentable, adecuada para empresas de todos los tamaños.

¡Pruébalo hoy mismo!

Acerca del autor
Gabriel Cioci, Desarrollador full-stack @ WebScrapingAPI
Gabriel CiociDesarrollador full-stack

Gabriel Cioci es desarrollador full stack en WebScrapingAPI, donde se encarga de crear y mantener los sitios web, el panel de usuario y los componentes principales de la plataforma destinados a los usuarios.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.