AttributeError: ‘module’ object heeft geen attribuut ‘urlretrieve’

Ik probeer een programma te schrijven dat mp3’s van een website downloadt en ze vervolgens samenvoegt, maar telkens als ik de bestanden probeer te downloaden, krijg ik deze foutmelding:

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'

De regel die dit probleem veroorzaakt is

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

Antwoord 1, autoriteit 100%

Omdat je Python 3 gebruikt, is er geen urllib-module meer. Het is opgesplitst in verschillende modules.

Dit komt overeen met urlretrieve:

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

urlretrievegedraagt zich precies hetzelfde als in Python 2.x, dus het werkt prima.

Eigenlijk:

  • urlretrieveslaat het bestand op in een tijdelijk bestand en retourneert een tuple (filename, headers)
  • urlopenretourneert een Requestobject waarvan de readmethode een bytestring retourneert die de bestandsinhoud bevat

Antwoord 2, autoriteit 4%

Een Python 2+3 compatibele oplossing is:

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")

Antwoord 3, autoriteit 2%

Stel dat je de volgende regels code hebt

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

Als u de volgende foutmelding ontvangt

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

Probeer dan de volgende code om het probleem op te lossen:

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

Other episodes