() translation by (you can also view the original English article)
Python proporciona varias maneras de descargar archivos de Internet. Es posible hacerlo a través de HTTP usando el paquete urllib o la biblioteca requests. Este tutorial discutirá cómo usar estas bibliotecas para descargar archivos desde direcciones URL usando Python.
La biblioteca requests
La biblioteca requests es una de las más populares en Python. Requests te permite enviar solicitudes HTTP/1.1 sin la necesidad de añadir cadenas de consulta manualmente a tus URL o codificar tus datos POST en forma de formulario.
Con la biblioteca requests puedes llevar a cabo muchas funciones, entre ellas:
- agregar datos de formularios,
- agregar archivos de varias partes,
- y acceder a los datos de respuesta de Python
Creación de solicitudes
Lo primero que necesitas hacer es instalar la biblioteca, y es tan sencillo como ejecutar lo siguiente:
1 |
pip install requests
|
Para comprobar si la instalación ha sido exitosa, puedes hacer una prueba muy sencilla en tu intérprete de Python simplemente escribiendo:
1 |
import requests |
Si la instalación se ha realizado exitosamente, no habrá errores.
Entre las solicitudes HTTP se encuentran las siguientes:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- HEAD
Cómo hacer una solicitud GET
Hacer solicitudes es muy sencillo, como se ilustra a continuación.
1 |
import requests |
2 |
req = requests.get(“https://www.google.com”) |
El comando anterior obtendrá la página web de Google y almacenará la información en la variable req
. Luego podemos continuar y obtener otros atributos también.
Por ejemplo, para saber si fue posible obtener la página web de Google de manera exitosa, consultaremos status_code.
1 |
import requests |
2 |
req = requests.get(“http://www.google.com") |
3 |
req.status_code
|
4 |
200
|
5 |
|
6 |
# 200 means a successful request
|
¿Qué pasa si queremos averiguar el tipo de codificación de la página web de Google?
1 |
req.encoding |
2 |
ISO-8859–1 |
Es posible que también quieras saber cuál es el contenido de la respuesta.
1 |
req.text |
Este es tan solo el contenido truncado de la respuesta.
1 |
'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en
|
2 |
"><head><meta content="Search the world\'s information, including webpages, imag
|
3 |
es, videos and more. Google has many special features to help you find exactly w
|
4 |
hat you\'re looking for." name="description"><meta content="noodp" name="robots" |
5 |
><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta conten |
6 |
t="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image |
7 |
"><title>Google</title><script>(function(){window.google={kEI:\'_Oq7WZT-LIf28QWv |
Cómo hacer una solicitud POST
En términos simples, una solicitud POST se usa para crear o actualizar datos. Esta se usa especialmente durante el envío de formularios.
Supongamos que tienes un formulario de registro que recibe una dirección de correo electrónico y una contraseña como datos de entrada; al hacer clic en el botón de envío para realizar el registro, la solicitud POST será igual a la que se muestra a continuación.
1 |
data = {"email":"info@tutsplus.com", |
2 |
"password":"12345") |
3 |
req = requests.post(“http://www.google.com, params = data) |
Cómo hacer una solicitud PUT
Una solicitud PUT es similar a una solicitud POST. Se usa para actualizar datos. Por ejemplo, la API a continuación muestra cómo hacer una solicitud PUT
.
1 |
data= {"name":"tutsplus", |
2 |
"telephone":"12345") |
3 |
r.put("http://www.contact.com, params= data") |
Cómo hacer una solicitud DELETE
Una solicitud DELETE, como su nombre sugiere, se usa para eliminar datos. A continuación puedes ver un ejemplo de una solicitud DELETE
.
1 |
data= {'name':'Tutsplus'} |
2 |
url = "https://www.contact.com/api/") |
3 |
response = requests.delete(url, params= data) |
El paquete urllib
urllib
es un paquete que recopila varios módulos para trabajar con direcciones URL, a saber:
-
urllib.request
, para abrir y leer direcciones URL. -
urllib.error
, que contiene las excepciones generadas porurllib.request
. -
urllib.parse
, para el análisis de direcciones URL. -
urllib.robotparser
, para el análisis de archivosrobots.txt
.
urllib.request ofrece una interfaz muy sencilla en forma de la función urlopen
, que es capaz de recuperar direcciones URL usando una variedad de protocolos diferentes. También ofrece una interfaz ligeramente más compleja para gestionar la autenticación básica, las cookies, los proxy, etcétera.
Cómo recuperar direcciones URL con urllib
La forma más sencilla de usar urllib.request es la siguiente:
1 |
import urllib.request |
2 |
with urllib.request.urlopen('http://python.org/') as response: |
3 |
html = response.read() |
Si quieres recuperar un recurso de Internet y almacenarlo, puedes hacerlo a través de la función urlretrieve()
.
1 |
import urllib.request |
2 |
filename, headers = urllib.request.urlretrieve('http://python.org/') |
3 |
html = open(filename) |
Descarga imágenes con Python
En este ejemplo, queremos descargar la imagen disponible en este enlace usando tanto la biblioteca requests como el módulo urllib.
1 |
url = 'https://www.python.org/static/opengraph-icon-200x200.png' |
2 |
|
3 |
# downloading with urllib
|
4 |
|
5 |
# imported the urllib library
|
6 |
import urllib |
7 |
|
8 |
# Copy a network object to a local file
|
9 |
urllib.urlretrieve(url, "python.png") |
10 |
|
11 |
|
12 |
# downloading with requests
|
13 |
|
14 |
# import the requests library
|
15 |
import requests |
16 |
|
17 |
|
18 |
# download the url contents in binary format
|
19 |
r = requests.get(url) |
20 |
|
21 |
# open method to open a file on your system and write the contents
|
22 |
with open("python1.png", "wb") as code: |
23 |
code.write(r.content) |
Descarga archivos PDF con Python
En este ejemplo, vamos a descargar un PDF sobre las tendencias de Google desde este enlace.
1 |
url = 'https://static.googleusercontent.com/media/www.google.com/en//googleblogs/pdfs/google_predicting_the_present.pdf' |
2 |
|
3 |
# downloading with urllib
|
4 |
|
5 |
# import the urllib package
|
6 |
import urllib |
7 |
|
8 |
# Copy a network object to a local file
|
9 |
urllib.urlretrieve(url, "tutorial.pdf") |
10 |
|
11 |
|
12 |
# downloading with requests
|
13 |
|
14 |
# import the requests library
|
15 |
import requests |
16 |
|
17 |
# download the file contents in binary format
|
18 |
r = requests.get(url) |
19 |
|
20 |
# open method to open a file on your system and write the contents
|
21 |
with open("tutorial1.pdf", "wb") as code: |
22 |
code.write(r.content) |
Descarga archivos Zip con Python
En este ejemplo, vamos a descargar el contenido de un repositorio de GitHub que se encuentra en este enlace y almacenaremos el archivo localmente.
1 |
url = 'https://codeload.github.com/fogleman/Minecraft/zip/master' |
2 |
|
3 |
# downloading with requests
|
4 |
|
5 |
# import the requests library
|
6 |
import requests |
7 |
|
8 |
|
9 |
# download the file contents in binary format
|
10 |
r = requests.get(url) |
11 |
|
12 |
# open method to open a file on your system and write the contents
|
13 |
with open("minemaster1.zip", "wb") as code: |
14 |
code.write(r.content) |
15 |
|
16 |
|
17 |
# downloading with urllib
|
18 |
|
19 |
# import the urllib library
|
20 |
import urllib |
21 |
|
22 |
# Copy a network object to a local file
|
23 |
urllib.urlretrieve(url, "minemaster.zip") |
Descarga videos con Python
En este ejemplo, queremos descargar la videoconferencia disponible en esta página.
1 |
url = 'https://www.youtube.com/watch?v=aDwCCUfNFug' |
2 |
video_name = url.split('/')[-1] |
3 |
|
4 |
# using requests
|
5 |
|
6 |
# imported the requests library
|
7 |
import requests |
8 |
|
9 |
print "Downloading file:%s" % video_name |
10 |
|
11 |
# download the url contents in binary format
|
12 |
r = requests.get(url) |
13 |
|
14 |
# open method to open a file on your system and write the contents
|
15 |
with open('tutorial.mp4', 'wb') as f: |
16 |
f.write(r.content) |
17 |
|
18 |
|
19 |
# using urllib
|
20 |
|
21 |
# imported the urllib library
|
22 |
import urllib |
23 |
print "Downloading file:%s" % video_name |
24 |
|
25 |
# Copy a network object to a local file
|
26 |
urllib.urlretrieve(url, "tutorial2.mp4") |
Conclusión
Este tutorial ha cubierto los métodos utilizados más comúnmente para descargar archivos, así como los formatos de archivo más comunes. Si bien escribirás menos código al usar el módulo urllib
, el módulo requests
es preferido debido a su simplicidad, popularidad y su amplia gama de características, entre las que se encuentran las siguientes:
- Conexiones persistentes y agrupación de conexiones
- Dominios y direcciones URL internacionales
- Sesiones con persistencia de cookies
- Verificación SSL estilo navegador
- Decodificación automática de contenido
- Autenticación básica/implícita
- Elegantes cookies clave/valor
- Descompresión automática
- Cuerpos de respuesta Unicode
- Compatibilidad con proxy HTTP(S)
- Cargas de archivos de varias partes
- Descargas en streaming
- Tiempos de espera de conexión
- Solicitudes fragmentadas
- Compatibilidad con
.netrc