La descarga de archivos de diferentes recursos en línea es una de las tareas de programación más importantes y comunes para realizar en la web. La importancia de la descarga de archivos se puede destacar por el hecho de que una gran cantidad de aplicaciones exitosas permiten a los usuarios descargar archivos. Estas son solo algunas funciones de la aplicación web que requieren la descarga de archivos:
- Compartición de archivos
- Procesamiento de datos
- Recuperar el código del sitio web (CSS, JS, etc.)
- Redes sociales
Estas son solo algunas de las aplicaciones que le vienen a la mente, pero estoy seguro de que puede pensar en muchas más. En este artículo, veremos algunas de las formas más populares en las que puede descargar archivos con Python.
Usando el módulo urllib.request
Contenido
los urllib.request El módulo se utiliza para abrir o descargar un archivo a través de HTTP. Específicamente, el urlretrieve
El método de este módulo es lo que usaremos para recuperar el archivo.
Para utilizar este método, debe pasar dos argumentos al urlretrieve
método: el primer argumento es la URL del recurso que desea recuperar, y el segundo argumento es la ruta del archivo local donde desea almacenar el archivo descargado.
Echemos un vistazo al siguiente ejemplo:
import urllib.request
print('Beginning file download with urllib2...')
url="http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg"
urllib.request.urlretrieve(url, '/Users/scott/Downloads/cat.jpg')
En el código anterior, primero importamos el urllib.request
módulo. A continuación creamos una variable url
que contiene la ruta del archivo a descargar. Finalmente, llamamos al urlretrieve
método y pasarlo el url
variable como primer argumento, «/Users/scott/Downloads/cat.jpg» como segundo parámetro para el destino del archivo. Tenga en cuenta que puede pasar cualquier nombre de archivo como segundo parámetro y esa es la ubicación y el nombre que tendrá su archivo, asumiendo que tiene los permisos correctos.
Ejecute el script anterior y vaya a su directorio «Descargas». Debería ver su archivo descargado llamado «cat.jpg».
Nota: Esta urllib.request.urlretrieve
se considera una «interfaz heredada» en Python 3, y puede quedar obsoleta en algún momento en el futuro. Debido a esto, no recomendaría usarlo en favor de uno de los métodos a continuación. Lo hemos incluido aquí debido a su popularidad en Python 2.
Usando el módulo urllib2
Otra forma de descargar archivos en Python es a través del módulo urllib2. los urlopen
El método del módulo urllib2 devuelve un objeto que contiene datos de archivo. Para leer el contenido de
Tenga en cuenta que en Python 3, urllib2
se fusionó con urllib
como urllib.request
y urllib.error
. Por lo tanto, este script solo funciona en Python 2.
import urllib2
filedata = urllib2.urlopen('http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg')
datatowrite = filedata.read()
with open('/Users/scott/Downloads/cat2.jpg', 'wb') as f:
f.write(datatowrite)
los open
El método acepta dos parámetros, la ruta al archivo local y el modo en el que se escribirán los datos. Aquí «wb» indica que el open
El método debe tener permiso para escribir datos binarios en el archivo dado.
Ejecute el script anterior y vaya a su directorio «Descargas». Debería ver el documento pdf descargado como «cat2.jpg»
Te puede interesar:Módulos de Python: Crear, importar y compartirUsando el módulo de solicitud
También puede descargar archivos usando peticiones módulo. los get
método del requests
El módulo se utiliza para descargar el contenido del archivo en formato binario. A continuación, puede utilizar el open
método para abrir un archivo en su sistema, tal como hicimos con el método anterior, urllib2.urlopen
.
Eche un vistazo al siguiente guión:
import requests
print('Beginning file download with requests')
url="http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg"
r = requests.get(url)
with open('/Users/scott/Downloads/cat3.jpg', 'wb') as f:
f.write(r.content)
# Retrieve HTTP meta-data
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
En el script anterior, el open
El método se usa una vez más para escribir datos binarios en un archivo local. Si ejecuta el script anterior y va a su directorio «Descargas», debería ver su archivo JPG recién descargado llamado «cat3.jpg».
Con el requests
módulo, también puede recuperar fácilmente metadatos relevantes sobre su solicitud, incluido el código de estado, encabezados y mucho más. En el script anterior, puede ver cómo accedemos a algunos de estos metadatos.
Lo mismo ocurre con los parámetros adicionales que se requieren en la solicitud HTTP GET. Si necesita agregar encabezados de cliente, por ejemplo, todo lo que necesita hacer es crear un dict
con tus encabezados y pásala a tu get
solicitud:
headers = {'user-agent': 'test-app/0.0.1'}
r = requests.get(url, headers=headers)
Hay muchas más opciones y funciones en esta biblioteca, así que echa un vistazo a su gran guía del usuario para obtener más información sobre cómo usarlo.
Te puede interesar:Bucles en PythonUsando el módulo wget
Una de las formas más sencillas de descargar archivos en Python es a través de wget módulo, que no requiere que abra el archivo de destino. los download
método del wget
módulo descarga archivos en una sola línea. El método acepta dos parámetros: la ruta URL del archivo a descargar y la ruta local donde se almacenará el archivo.
import wget
print('Beginning file download with wget module')
url="http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg"
wget.download(url, '/Users/scott/Downloads/cat4.jpg')
Ejecute el script anterior y vaya a su directorio «Descargas». Aquí debería ver el archivo «cat4.jpg» recién descargado.
Conclusión
En este artículo presentamos cuatro de los métodos más utilizados para descargar archivos en Python. Personalmente, prefiero usar el request
módulo para descargar archivos debido a su combinación de simplicidad y potencia. Sin embargo, su proyecto puede tener restricciones que le impidan usar bibliotecas de terceros, en cuyo caso usaría el urllib2
módulo (para Python 2) o el urllib.request
módulo (para Python 3).
¿Qué biblioteca prefieres y por qué? ¡Háznoslo saber en los comentarios!