Descargar archivos con Python

    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

    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”

    Usando 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.

    Usando 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!

     

    Etiquetas:

    Deja una respuesta

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