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 *