2013-07-31 40 views
34

Sto cercando di scrivere un programma che scarica mp3 di fuori di un sito web poi unirsi a loro insieme, ma ogni volta che provo a scaricare i file ottengo questo errore:AttributeError: oggetto 'modulo' non ha alcun attributo 'urlretrieve'

Traceback (most recent call last): 
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 214, in <module> main() 
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 209, in main getMp3s() 
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 134, in getMp3s 
raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3") 
AttributeError: 'module' object has no attribute 'urlretrieve' 

La linea che causa questo problema è

raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3") 

risposta

87

Come si sta utilizzando Python 3, non v'è più alcun modulo urllib. È stato diviso in diversi moduli.

Questo sarebbe equivalente a urlretrieve:

import urllib.request 
data = urllib.request.urlretrieve("http://...") 

urlretrieve si comporta esattamente allo stesso modo come ha fatto in Python 2.x, quindi lavoreremo bene.

In sostanza:

  • urlretrieve salva il file in un file temporaneo e restituisce una tupla (filename, headers)
  • urlopen restituisce un oggetto Request cui read metodo restituisce un bytestring contenente il contenuto del file
+1

Se Volevo scaricare i file .mp3 in una lista questo funzionerebbe ancora? – Sike1217

+1

Vedere la mia risposta modificata;) – dom0

+2

Attraversato questo errore quando si lavora attraverso il tutorial di google su decine di macchine per l'apprendimento della macchina (sono nuovo in Python quindi la tua risposta è molto apprezzata) http://www.tensorflow.org/tutorials/mnist/beginners/ index.md –

4

A La soluzione compatibile con Python 2 + 3 è:

import sys 

if sys.version_info[0] >= 3: 
    from urllib.request import urlretrieve 
else: 
    # Not Python 3 - today, it is most likely to be Python 2 
    # But note that this might need an update when Python 4 
    # might be around one day 
    from urllib import urlretrieve 

# Get file from URL like this: 
urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3") 
+0

@ tim654321 L'ho cambiato. Hai ragione, c'è una possibilità che questo sia lo stesso per Python 3 e versioni successive. –

+0

Un commento al tuo commento ("Not Python 3 ..."): Dato che stai controllando '> = 3', la preoccupazione riguardante Python4 non è valida. –

1

Supponiamo di avere seguenti righe di codice

MyUrl = "www.google.com" #Your url goes here 
urllib.urlretrieve(MyUrl) 

Se si ricevono seguente messaggio di errore

AttributeError: module 'urllib' has no attribute 'urlretrieve' 

Allora dovreste provare seguente codice per risolvere il problema:

import urllib.request 
MyUrl = "www.google.com" #Your url goes here 
urllib.request.urlretrieve(MyUrl) 
Problemi correlati