AttributeError:'模块'对象没有属性'urlretrieve'


81

我正在尝试编写一个程序,该程序将从网站上下载mp3,然后将它们加入在一起,但是每当我尝试下载文件时,都会出现此错误:

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'

导致此问题的行是

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

Answers:


208

当您使用Python 3时,不再有urllib模块。它已分为几个模块。

这相当于urlretrieve:

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

urlretrieve的行为与Python 2.x完全相同,因此可以正常工作。

基本上:

  • urlretrieve 将文件保存到临时文件并返回一个元组 (filename, headers)
  • urlopen返回一个Request对象,其read方法返回一个包含文件内容的字节串

2
如果我想将.mp3文件下载到列表中,这是否仍然有效?
Sike1217

3
通过Google的tensorflow机器学习教程(我是python的新手)工作时遇到了这个错误tensorflow.org/tutorials/mnist/beginners/index.md
Chris Smith,

10

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

@ tim654321我更改了它。没错,对于Python 3和更高版本,这可能是相同的。
马丁·托马

对您的评论的评论(“不是Python 3 ...”):由于您正在检查>= 3,因此关于Python4的关注不是有效的关注。
Martin R.

@MartinR。或更确切地说,关于Python 4的注释应该放在代码>= 3块中。
杰西·奇斯霍尔姆

4

假设您有以下几行代码

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

如果您收到以下错误消息

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

然后,您应该尝试使用以下代码来解决此问题:

import urllib.request
MyUrl = "www.google.com" #Your url goes here
urllib.request.urlretrieve(MyUrl)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.