AttributeError: Das Objekt 'module' hat kein Attribut 'urlretrieve'.

81

Ich versuche, ein Programm zu schreiben, das MP3s von einer Website herunterlädt und sie dann zusammenfügt. Wenn ich jedoch versuche, die Dateien herunterzuladen, wird folgende Fehlermeldung angezeigt:

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'

Die Leitung, die dieses Problem verursacht, ist

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

Antworten:

208

Da Sie Python 3 verwenden, gibt es kein urllib-Modul mehr. Es wurde in mehrere Module aufgeteilt.

Dies wäre gleichbedeutend mit urlretrieve:

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

urlretrieve verhält sich genauso wie in Python 2.x, funktioniert also einwandfrei.

Grundsätzlich:

  • urlretrieve speichert die Datei in einer temporären Datei und gibt ein Tupel zurück (filename, headers)
  • urlopenGibt ein RequestObjekt zurück, dessen readMethode einen Bytestring zurückgibt, der den Dateiinhalt enthält
dom0
quelle
2
Wenn ich die MP3-Dateien in eine Liste herunterladen wollte, würde dies immer noch funktionieren?
Sike1217
3
Dieser Fehler ist beim Durcharbeiten des Tensorflow-Lernprogramms für maschinelles Lernen von Google aufgetreten (ich bin neu in Python, daher wird Ihre Antwort sehr geschätzt). Tensorflow.org/tutorials/mnist/beginners/index.md
Chris Smith,
10

Eine Python 2 + 3-kompatible Lösung ist:

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")
Martin Thoma
quelle
@ tim654321 Ich habe es geändert. Sie haben Recht, es besteht die Möglichkeit, dass dies auch für Python 3 und spätere Versionen gilt.
Martin Thoma
Ein Kommentar zu Ihrem Kommentar ("Not Python 3 ..."): Da Sie dies überprüfen >= 3, ist die Besorgnis bezüglich Python4 nicht gültig.
Martin R.
@ MartinR. oder besser gesagt, ... sollten sich die Notizen zu Python 4 stattdessen im >= 3Block befinden.
Jesse Chisholm
4

Angenommen, Sie haben folgende Codezeilen

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

Wenn Sie die folgende Fehlermeldung erhalten

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

Dann sollten Sie versuchen, den folgenden Code zu verwenden, um das Problem zu beheben:

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