¿Descarga básica de archivos http y guardado en disco en python?



Answers

Como se menciona here :

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

EDIT: Si aún desea usar las solicitudes, eche un vistazo a esta pregunta o esta .

Question

Soy nuevo en Python y he estado revisando las preguntas y respuestas en este sitio para obtener una respuesta a mi pregunta. Sin embargo, soy un principiante y me resulta difícil entender algunas de las soluciones. Necesito una solución muy básica.

¿Podría alguien explicarme una solución simple para 'Descargar un archivo a través de http' y 'Guardarlo en un disco, en Windows' para mí?

No estoy seguro de cómo usar los módulos shutil y os, tampoco.

El archivo que deseo descargar tiene menos de 500 MB y es un archivo de almacenamiento .gz. Si alguien puede explicar cómo extraer el archivo y utilizar los archivos también, ¡sería genial!

Aquí hay una solución parcial, que escribí a partir de varias respuestas combinadas:

import requests
import os
import shutil

global dump

def download_file():
    global dump
    url = "http://randomsite.com/file.gz"
    file = requests.get(url, stream=True)
    dump = file.raw

def save_file():
    global dump
    location = os.path.abspath("D:\folder\file.gz")
    with open("file.gz", 'wb') as location:
        shutil.copyfileobj(dump, location)
    del dump

¿Podría alguien señalar los errores (nivel de principiante) y explicar los métodos más fáciles para hacer esto?

¡Gracias!




Cuatro métodos que usan wget, urllib y solicitud.

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget


url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __name__ == '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest - 4469882 llamadas a funciones (4469842 llamadas primitivas) en 20.236 segundos

testRequest2 - llamadas a la función 8580 (8574 llamadas primitivas) en 0.072 segundos

testUrllib - Llamadas a función 3810 (3775 llamadas primitivas) en 0.036 segundos

testwget - La función 3489 llama en 0.020 segundos




Otra forma limpia de guardar el archivo es esta:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")



Links