Descargar un archivo en Python
-
Utilice el módulo
requests
para descargar archivos en Python -
Utilice el módulo
urllib
para descargar archivos en Python -
Utilice el módulo
pycurl
para descargar archivos 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()