Python en Español

Descargar archivos usando Python (Ejemplos simples)

En este tutorial, aprenderás cómo descargar archivos de la web usando diferentes módulos de Python. Descargará archivos regulares, páginas web, vídeos de YouTube, archivos de Google Drive, Amazon S3 y otras fuentes.

Además, aprenderás cómo superar muchos desafíos que puedes enfrentar, como la descarga de archivos que redirige, la descarga de archivos grandes, la descarga multiproceso y otras tácticas.


 

 

Usando peticiones

Puedes descargar archivos desde una URL utilizando el módulo de requests.

Considere el siguiente código:

Simplemente, obtén la URL utilizando el método get del módulo de request y almacena el resultado en una variable llamada “myfile”. A continuación, escribe el contenido de la variable en un archivo.

 


Usando wget

También puede descargar un archivo desde una URL utilizando el módulo wget de Python. El módulo wget se puede instalar usando pip de la siguiente manera:

pip install wget

Considere el siguiente código en el que descargaremos la imagen del logotipo de Python:

En este código, la URL junto con la ruta (donde se almacenará la imagen) se pasa al método download del módulo wget.


Descargar archivo que redirige

En esta sección, aprenderás a descargar desde una URL que redirige a otra URL con un archivo .pdf utilizando solicitudes. La URL es la siguiente:

https://readthedocs.org/projects/python-guide/downloads/pdf/latest/

Para descargar este archivo pdf, utiliza el siguiente código:

En este código, el primer paso especificamos la URL. Luego usamos el método get del módulo requests para obtener la URL. En el método de obtención, establecemos allow_redirects en True, lo que permitirá la redirección en la URL y el contenido después de la redirección se asignará a la variable myfile.

Finalmente, abrimos un archivo para escribir el contenido extraído.

 

Descargar un archivo grande en trozos

Considera el código soplado:

Primero, usamos el método get del módulo requests como lo hicimos antes, pero esta vez estableceremos el atributo stream en True.

Luego creamos un archivo llamado PythonBook.pdf en el directorio de trabajo actual y lo abrimos para escribir.

Luego especificamos el tamaño del trozo que queremos descargar. Hemos establecido a 1024 bytes. Iteramos a través de cada trozo y escribir los trozos en el archivo hasta se terminen trozos terminaron.

El shell de Python tendrá el siguiente aspecto cuando se descarguen los fragmentos:

Descargar un archivo grande en trozos

¿No es bonito? No te preocupes, te mostraremos una barra de progreso para el proceso de descarga más adelante.

 


Descargar archivos múltiples (descarga paralela / masiva)

Para descargar varios archivos a la vez, importa los siguientes módulos:

Importamos los módulos os y time para comprobar cuánto tiempo se tarda en descargar archivos. El módulo ThreadPool te permite ejecutar varios subprocesos o procesos utilizando el grupo.

Vamos a crear una función simple que envía la respuesta a un archivo en trozos:

Las URL son un arreglo bidimensional que especifica la ruta y la URL de una página que desea descargar.

Pasa la URL a requests.get como hicimos en la sección anterior. Finalmente, abre el archivo (ruta especificada en la URL) y escribe el contenido de la página.

Ahora podemos llamar a esta función para cada URL por separado y también podemos llamar a esta función para todas las URL al mismo tiempo. Hagámoslo para cada URL por separado en un ciclo for y observa el temporizador:

El resultado será así:

Descargar archivos múltiples

Ahora reemplace el ciclo for con la siguiente línea de código:

ThreadPool(9).imap_unordered(url_response, urls)

Ejecutar el script:

Descargar archivos múltiples usando threads

 

Descargar con una barra de progreso

La barra de progreso es un widget de interfaz de usuario del módulo clint. Para instalar el módulo clint, escriba el siguiente comando:

pip install clint

Instalar el módulo clint

Considera el siguiente código:

En este código, importamos el módulo de request y luego desde clint.textui importamos el widget de progreso. La única diferencia está en el ciclo for. Utilizamos el módulo del método barra de progreso al escribir el contenido en el archivo. La salida será como la siguiente:

Descargar un archivo con una barra de progreso.


Descarga una página web utilizando urllib.

En esta sección, descargaremos una página web utilizando urllib.

La biblioteca urllib es una biblioteca estándar de Python, por lo que no es necesario que la instales.

La siguiente línea de código puede descargar fácilmente una página web:

urllib.request.urlretrieve('url', 'path')

Especifica aquí la URL que deseas guardar como y dónde deseas almacenarla:

urllib.request.urlretrieve('https://www.python.org/', 'c:/users/LikeGeeks/documents/PythonOrganization.html')

En este código, utilizamos el método urlretrieve y pasamos la URL de un archivo junto con la ruta donde guardaremos el archivo. La extensión del archivo será .html.

 

Descargar via proxy

Si necesitas usar un proxy para descargar tus archivos, puedes usar el ProxyHandler del módulo urllib. Revisa el siguiente código:

En este código, creamos el objeto proxy y abrimos el proxy invocando el método build_opener de urllib y pasamos el objeto proxy. Luego hacemos la solicitud para recuperar la página.

Descargar via proxy

Además, puedes usar el módulo de solicitudes como se documenta en la documentación oficial:

Simplemente importa el módulo requests y cree un objeto proxy. A continuación, puedes recuperar el archivo.

Descargar a través de un proxy utilizando requests


Utilizando urllib3

El urllib3 es una versión mejorada del módulo urllib. Puedes descargarlo e instalarlo usando pip:

pip install urllib3

Buscaremos una página web y la almacenaremos en un archivo de texto utilizando urllib3.

Importa los siguientes módulos:

import urllib3, shutil

El módulo shutil se utiliza cuando se trabaja con archivos.

Ahora inicializa la variable de cadena de URL de esta manera:

url = 'https://www.python.org/'

Luego usamos el PoolManager de urllib3 que realiza un seguimiento de los grupos de conexiones necesarios.

c = urllib3.PoolManager()

Crear un archivo:

filename = "test.txt"

Finalmente, enviamos una solicitud GET para obtener la URL, abrir un archivo y escribir la respuesta en ese archivo:

 

Descargar desde Google Drive

Puede usar googledrivedownloader para descargar cualquier archivo desde Google Drive. Para instalarlo, usa el siguiente comando:

pip install googledrivedownloader

Echa un vistazo al siguiente código:

Aquí pasamos el id del archivo del disco de Google junto con la ruta de destino donde guardaremos el archivo. Luego tenemos el parámetro unzip. Si es true, el archivo descargado se descomprimirá en la misma carpeta de destino.

Descargar desde Google Drive

En este ejemplo, descargamos el archivo zip y luego la carpeta se descomprime.

 

Descargar archivo desde S3 usando boto3

Para descargar archivos desde Amazon S3, puedes usar el módulo Python boto3.

Antes de comenzar, necesitas instalar el módulo awscli usando pip:

pip install awscli

Instalar awscli

Para la configuración de AWS, ejecuta el siguiente comando:

aws configure

Ahora ingresa tus datos de esta forma:

Descargar archivo desde S3 usando boto3

Para descargar un archivo de Amazon S3, importa boto3 y botocore. Boto3 es un SDK de Amazon para Python para acceder a servicios web de Amazon como S3. Botocore proporciona los servicios de línea de comandos para interactuar con los servicios web de Amazon.

Botocore viene con awscli. Para instalar boto3 ejecuta lo siguiente:

pip install boto3

Instalar boto3

Ahora importa estos dos módulos:

import boto3, botocore

Al descargar archivos de Amazon, necesitamos tres parámetros:

  1. El nombre del Bucket
  2. El nombre del archivo que necesitas descargar.
  3. El nombre del archivo después de que se haya descargado.

Inicializar las variables:

Ahora inicializa una variable para usar el recurso de una sesión. Para esto, llamaremos al método resource () de boto3 y pasaremos el servicio que es s3:

service = boto3.resource(s3)

Finalmente, descarga el archivo utilizando el método download_file y pasa las variables:

service.Bucket(bucket).download_file(file_name, downloaded_file)

Descargar vídeos de Youtube

Para descargar vídeos de YouTube, puedes usar el módulo pytube.

Primero, instale el módulo pytube usando pip como:

pip install pytube

Instalar pytube

Ahora, importa YouTube desde Pytube:

from pytube import YouTube

Luego pasa la URL del video que necesitas descargar:

YouTube('https://www.youtube.com/watch?v=himEMfYQJ1w').streams.first().download()

En esta línea de código, pasamos la URL. Luego están los streams (lista de formatos) que tiene el vídeo. Por ejemplo:

Esto imprimirá todos los formatos junto con la resolución de vídeo de la siguiente manera:

El primer método () toma el primer formato y el método de descarga () descarga el vídeo.

Si desea obtener información sobre un vídeo, por ejemplo, el título, use .title de la siguiente manera:

 

Usando asyncio

El módulo asyncio se centra en el manejo de eventos del sistema. Funciona alrededor de un ciclo de eventos en donde se espera que ocurra un evento y luego reacciona a ese evento. La reacción puede estar llamando a otra función. Este proceso se llama manejo uniforme. El módulo asyncio utiliza corotinas para el manejo de eventos.

Para utilizar el manejo de eventos asyncio y la funcionalidad de corutinas, importaremos el módulo asyncio:

import asyncio

Además, necesitamos instalar el módulo aiohttp.

pip install aiohttp

Importaremos el módulo async_timeout para manejar los tiempos de espera.

import async_timeout

La palabra clave async indica que se trata de un nativo de asyncio coroutine. Dentro del cuerpo de la coroutine, tenemos la palabra clave await que devuelve un cierto valor. También se puede utilizar la palabra clave return.

Ahora vamos a crear un código usando una herramienta electrónica para descargar archivos de la web:

En este código, creamos una función de rutina asíncrona que descarga nuestros archivos en trozos y los guarda con un nombre de archivo aleatorio y devuelve un mensaje.

Luego tenemos otra llamada async coroutine get_url, la cual espera las URL y crea una cola de todas las URL.

Ahora para iniciar la rutina, tenemos que colocar la rutina dentro del ciclo de eventos utilizando el método get_event_loop () de asyncio y, finalmente, el ciclo de eventos se ejecuta utilizando el método run_until_complete () de asyncio.

Descargar archivos usando Python es divertido. Espero que encuentres el tutorial útil.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *