Descargar archivos con Python

descargar archivos con python

Descargar archivos con Python es posible gracias a al módulo urllib, que nos ayudará a buscar y abrir URLs.

También usaremos la función de la biblioteca estándar de Python llamada open(), para poder guardar la información en un archivo.

Descargar ficheros con urllib en Python

A continuación, podemos ver un ejemplo sencillo de como descargar archivo en Python con urllib.request y open(). En este caso descargaremos  el logo de Python de la página oficial y lo guardaremos con el nombre logo.png:

import urllib.request

url = "https://www.python.org/static/img/[email protected]"
file = "logo.png"
r= urllib.request.urlopen(url)
f = open(file, "wb") 
f.write(r.read()) 
f.close()

Lo primero que hacemos en el código anterior es designar cual es la url del archivo que queremos descargar, y un nombre para el archivo que guardaremos. Es importante que el nombre del archivo tenga una extensión adecuada al fichero que queremos descargar.

Una vez que tenemos la url y el nombre del fichero tenemos que hacer una petición http y recibir una respuesta (almacenada en r). Con esta respuesta escribiremos luego la información en nuestro archivo.

Antes de guardar la información en el archivo tenemos que abrir dicho archivo y con ello conseguiremos un objeto que representará nuestro fichero (f) con el cual haremos la operación de escritura con lo que hemos leído anteriormente (la respuesta de la petición http).

Cabe destacar que el fichero que descargaremos se guardará por defecto en la ruta desde la cual ejecutemos el script de Python. En el caso de que queramos cambiar esta ubicación tendremos que indicar la ruta junto con el nombre que usaremos para el fichero. Por ejemplo, así:

file = "../logo.png" # Los dos puntos representan el directorio anterior en sistemas unix

Descargar archivos en Python controlando excepciones

Este ejemplo es igual que el anterior pero controlando las posibles excepciones que se podría producir por ejemplo al realizar la petición http hacia una url incorrecta.

import urllib.request

url = "https://www.python.org/static/img/[email protected]"
file = "logo.png"
try:
    r = urllib.request.urlopen(url)
    f = open(file, "wb")
    f.write(r.read())
    f.close()
except Exception:
    print("Se ha producido un error")

En este caso simplemente imprimimos un mensaje de error, pero podríamos realizar otro acción como pedir de nuevo la url (si es este el problema) o cualquier otra acción que se considere oportuna.

La idea con este ejemplo es mostrar que podemos hacer un control de errores todo lo exhaustivo que se quiera.

Función para descargar cualquier archivo con urllib y Python

En este último ejemplo, crearemos una función un poco mas elaborada, con la que podamos pedir por teclado tanto la url de descarga como el nombre del fichero con el que guardaremos lo descargado:

import urllib.request

def download_file(url):
    file = input("Introduzca el nombre del fichero (con su extension) \n>")

    try:
        r = urllib.request.urlopen(url)
        f = open(file, "wb")
        f.write(r.read())
        f.close()
    except Exception:
        url = input("Se ha producido un error, vuelva a introducir la url \n> ")
        download_file(url)


url = input("Introduzca la url del archivo a descargar \n>")
download_file(url)

La razón principal por la que he creado una función para realizar el mismo proceso que en los ejemplos anteriores es poder llamar recursivamente a esta función en caso de error con la url.


Espero que os haya gustado y os haya servido, cualquier duda o crítica estaré encantado de responderla 🙂

Deja un comentario