Che cosa si usa il comando invece di urllib.richiesta.urlretrieve?

Attualmente sto scrivendo uno script che scarica un file da un URL

import urllib.request
urllib.request.urlretrieve(my_url, 'my_filename')

Secondo la documentazione, urllib.richiesta.urlretrieve è un’interfaccia precedente e potrebbe diventare obsoleto, quindi vorrei evitare di così non devo riscrivere questo codice in un prossimo futuro.

Non riesco a trovare un’altra interfaccia come download(url, filename) in librerie standard. Se urlretrieve è considerato un patrimonio interfaccia in Python 3, qual è la sostituzione?

InformationsquelleAutor Marcus | 2013-02-22

 

3 Replies
  1. 22

    Deprecato è una cosa, potrebbe diventare obsoleto ad un certo punto, in futuro, è un altro.

    Se si adatta alle tue esigenze, mi piacerebbe continuare ad usare urlretrieve.

    Che ha detto, si può fare senza di essa:

    from urllib.request import urlopen
    from shutil import copyfileobj
    
    with urlopen(image['url']) as in_stream, open(p, 'wb') as out_file:
        copyfileobj(in_stream, out_file)
    • Grazie mille. Non avevo idea che il shutil biblioteca neanche che esistesse 🙂
    • Wow, questo ha funzionato splendidamente. Stavo cercando la stessa cosa, ma per i piccoli pezzi di audio, e non riusciva a capire come salvare in un file. Non hai trovato urlretrieve per un po’, e non mi rendevo conto che urlopen mi darebbe l’byte — ho pensato che avrei dovuto cercare un metodo che può salvare il file, non vai in file e leggere/salvare i bit. Credo che questa è una pratica standard con una programmazione, quindi dovrebbe avere un senso, ma non ho mai lavorato con I/O prima. Grazie, è il modo più semplice di quanto temuto potrebbe essere.
    • Grazie per copyfileobj! Il problema con urlretrieve è che non ha alcun modo per determinare un errore del server (502/404/qualunque cosa).
    • Sto usando il reporthook in urlretrieve(..) per aggiornare una progressbar, ma che l’argomento non esiste in urlopen(..). Come posso aggiornare regolarmente il mio progressbar se posso passare a urlopen(..)?
  2. 17

    richieste è davvero bello per questo. Ci sono un paio di dipendenze anche se per installarlo. Qui è un esempio.

    import requests
    r = requests.get('imgurl')
    with open('pic.jpg','wb') as f:
      f.write(r.content)
  3. 0

    Un’altra soluzione senza l’uso di shutil e senza librerie esterne come richieste.

    import urllib.request
    
    image = {'url': 'https://cdn.sstatic.net/Sites/stackoverflow/img/appletouch-icon.png'}
    p = 'image.png'
    
    response = urllib.request.urlopen(image['url'])
    image = response.read()
    
    file = open(p, 'wb')
    
    file.write(image)
    file.close()
    • Ciao e benvenuto a MODO. Codice-solo risposte generalmente considerate meno utili. Si prega di modificare la tua risposta per aggiungere un po ‘ di contesto e di spiegare la vostra soluzione.

Lascia un commento