AttributeError: Đối tượng 'module' không có thuộc tính 'urlretrieve'


81

Tôi đang cố gắng viết một chương trình sẽ tải xuống mp3 từ một trang web sau đó kết hợp chúng lại với nhau nhưng bất cứ khi nào tôi cố gắng tải xuống các tệp, tôi đều gặp lỗi này:

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'

Dòng gây ra sự cố này là

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

Câu trả lời:


208

Khi bạn đang sử dụng Python 3, không còn mô-đun urllib nữa. Nó đã được chia thành nhiều mô-đun.

Điều này sẽ tương đương với urlretrieve:

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

urlretrieve hoạt động giống hệt như cách nó đã làm trong Python 2.x, vì vậy nó sẽ hoạt động tốt.

Về cơ bản:

  • urlretrieve lưu tệp vào tệp tạm thời và trả về một tuple (filename, headers)
  • urlopentrả về một Requestđối tượng có readphương thức trả về một bytestring chứa nội dung tệp

2
Nếu tôi muốn tải xuống các tệp .mp3 vào một danh sách, điều này có còn hoạt động không?
Sike1217,

3
Gặp phải lỗi này khi làm việc qua hướng dẫn học máy tensorflow của google (Tôi mới sử dụng python nên câu trả lời của bạn được đánh giá rất cao) tensorflow.org/tutorials/mnist/beginners/index.md
Chris Smith

10

Giải pháp tương thích với Python 2 + 3 là:

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 mình đã đổi rồi. Bạn nói đúng, có khả năng điều này sẽ giống nhau đối với Python 3 và các phiên bản mới hơn.
Martin Thoma

Nhận xét cho nhận xét của bạn ("Không phải Python 3 ..."): Vì bạn đang kiểm tra >= 3, mối quan tâm về Python4 không phải là mối quan tâm hợp lệ.
Martin R.

@MartinR. hoặc đúng hơn, ..., các ghi chú về Python 4 nên nằm trong >= 3khối.
Jesse Chisholm

4

Giả sử bạn có các dòng mã sau

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

Nếu bạn đang nhận được thông báo lỗi sau

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

Sau đó, bạn nên thử mã sau để khắc phục sự cố:

import urllib.request
MyUrl = "www.google.com" #Your url goes here
urllib.request.urlretrieve(MyUrl)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.