Python nos permite realizar descargas desde la web creando nuestros propios scripts de automatizaciones, la forma más fácil de hacerlo es utilizando librerías que ya se encuentran incluidas con la instalación básica de Python.
Veamos como hacerlo.
1. urllib.request.urlretrieve
La biblioteca urllib de Python ofrece una variedad de funciones diseñadas para manejar tareas comunes relacionadas con URL. Esto incluye analizar, solicitar y descargar archivos.
Consideremos un ejemplo básico de descarga del archivo robots.txt de www.google.com:
from urllib import request
# Definimos la URL del archivo a descargar
remote_url = 'https://www.google.com/robots.txt'
# Definimos el nombre del archivo local a guardar
local_file = 'local_copy.txt'
# Se realiza la descarga y se guarda el archivo de manera local
request.urlretrieve(remote_url, local_file)
2. requests.get
El módulo de Python Requests es una biblioteca súper amigable, considerada a si misma como “HTTP para humanos”. Al ofrecer una API muy simplificada, Requests hace honor a su lema incluso para demandas relacionadas con peticiones HTTP de alto rendimiento. Sin embargo, no incluye una sola línea para descargar archivos. En su lugar, uno debe guardar manualmente los datos de archivos transmitidos de la siguiente manera:
import requests
# Definimos la URL del archivo a descargar
remote_url = 'https://www.google.com/robots.txt'
# Definimos el nombre del archivo local a guardar
local_file = 'local_copy.txt'
# Se envía la petición HTTP Get para la obtención del recurso
data = requests.get(remote_url)
# Guardamos el archivo de manera local
with open(local_file, 'wb')as file:
file.write(data.content)
Hay algunos aspectos importantes de este enfoque a tener en cuenta, en particular el formato binario de transferencia de datos. Cuando un navegador web carga una página (o archivo), lo codifica utilizando la codificación especificada del host. Las codificaciones comunes incluyen UTF-8 y Latin-1.
Esta es una directiva dirigida a los navegadores web que reciben y muestran datos que no se aplican inmediatamente a la descarga de archivos.
Nota: los archivos descargados pueden requerir codificación para que se muestren correctamente.
Eso está más allá del alcance de este tutorial.
3. wget.download
La biblioteca wget Python ofrece un método similar a urllib y atrae mucha atención debido a que su nombre es idéntico al comando wget de Linux.
import wget
# Definimos la URL del archivo a descargar
remote_url = 'https://www.google.com/robots.txt'
# Definimos el nombre del archivo local a guardar
local_file = 'local_copy.txt'
# Se realiza la descarga y se guarda el archivo de manera local
wget.download(remote_url, local_file)
La función wget.download utiliza una combinación de urllib, tempfile y shutil para recuperar los datos descargados, guardarlos en un archivo temporal y luego mover ese archivo (y cambiarle el nombre) a la ubicación especificada.
Descargar archivos con Python es súper simple y se puede lograr usando las funciones estándar de urllib. Aunque es importante mencionar que la biblioteca de requests ofrece las API más fáciles y versátiles para tareas comunes relacionadas con HTTP. Una excepción notable son las funciones de análisis de URL de urllib. Sin embargo, estos están estrictamente relacionados con HTTP, así que te invito a pruebes con cuál módulo te va mejor y nos compartas tu experiencia en los comentarios.