Advertisement
  1. Code
  2. Python

Cómo descargar archivos en Python

Scroll to top
Read Time: 6 min

() 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 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
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.