Descargar un archivo en Python

Siddharth Swami 30 enero 2023
  1. Utilice el módulo requests para descargar archivos en Python
  2. Utilice el módulo urllib para descargar archivos en Python
  3. Utilice el módulo pycurl para descargar archivos en Python
Descargar un archivo en Python

Python se usa con mucha frecuencia para acceder a recursos en Internet. Podemos generar solicitudes y conexiones usando diferentes bibliotecas. Estas bibliotecas también pueden ayudarnos a descargar o leer archivos HTTP de la web.

En este tutorial, descargaremos archivos de Internet en Python.

Utilice el módulo requests para descargar archivos en Python

Podemos utilizar el módulo requests para recuperar información y leer páginas web de Internet.

El método get() ayuda a recuperar la ruta del archivo desde la URL dada, desde la cual se descargará el archivo. El método open() crea un objeto de archivo donde deseamos guardar el archivo, y luego la función write() se usa para escribir el contenido del archivo en la ruta deseada.

Usamos estas funciones para descargar un archivo, como se muestra a continuación.

import requests as req

URL = "https://www.facebook.com/favicon.ico"
file = req.get(url, allow_redirects=True)

open("facebook.ico", "wb").write(file.content)

Producción :

1150

El código anterior descarga un archivo de logotipo de Facebook desde su URL y lo almacena en el directorio de trabajo. Podemos especificar cualquier ruta en la función open(), pero tenemos que abrirla en modo wb. Esto indica que pretendemos escribir un archivo en modo binario.

El ejemplo anterior es adecuado para descargar archivos más pequeños, pero no funciona de manera eficiente para archivos grandes. La función file.content se utiliza para obtener el contenido del archivo como una sola cadena. Como usamos un archivo pequeño en el ejemplo anterior, funcionó correctamente.

Si tenemos que descargar un archivo grande, entonces debemos usar la función file.iter_content() en la que estaremos especificando el tamaño del fragmento. Descarga los datos en forma de fragmentos.

Usamos esta función en el siguiente ejemplo.

import requests

URL = "http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ch1-2.pdf"

file = requests.get(URL, stream=True)

with open("Python.pdf", "wb") as pdf:
    for chunk in file.iter_content(chunk_size=1024):

        if chunk:
            pdf.write(chunk)

Utilice el módulo urllib para descargar archivos en Python

También podemos usar la biblioteca urllib en Python para descargar y leer archivos de la web. Este es un módulo de manejo de URL que tiene diferentes funciones para realizar la tarea dada.

Aquí también, tenemos que especificar la URL del archivo a descargar. El método urllib.request.urlopen() obtiene la ruta del archivo y envía una solicitud al servidor donde se está descargando el archivo.

Para descargar archivos, podemos usar la función urllib.request.urlretrieve(). Descargará el recurso de la dirección dada y lo almacenará en el directorio proporcionado.

Descargamos el icono de Facebook usando este método en el siguiente ejemplo.

import urllib

urllib.request.urlretrieve("https://www.facebook.com/favicon.ico", "fb.ico")

Producción :

('fb.ico', <http.client.HTTPMessage at 0x2d2d317a088>)

La salida anterior indica que el archivo se descargó correctamente.

Utilice el módulo pycurl para descargar archivos en Python

Podemos utilizar el manejo de archivos con este módulo para descargar archivos de Internet. Primero, tenemos que crear un objeto de archivo para donde deseamos descargar el archivo requerido. Luego, usaremos la función pycurl.Curl() para crear un objeto e iniciar la sesión de curl.

El método setopt() se utiliza para establecer el valor de URL del archivo. A continuación, la función perform() realiza el proceso de transferencia de archivos desde el servidor enviando la solicitud HTTP. A continuación, escribiremos los datos recuperados en el archivo utilizando el objeto de archivo. Finalmente, el método close() cierra la sesión y obtenemos nuestro archivo descargado en el directorio de trabajo.

Vea el código a continuación.

import pycurl

file_name = "fb.ico"
file_src = "https://www.facebook.com/favicon.ico"

with open(file_name, "wb") as f:
    cl = pycurl.Curl()
    cl.setopt(cl.URL, file_src)
    cl.setopt(cl.WRITEDATA, f)
    cl.perform()
    cl.close()

Artículo relacionado - Python HTTP