AttributeError: 'モジュール'オブジェクトに属性 'urlretrieve'がありません


82

ウェブサイトから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")

回答:


211

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 2013

3
グーグルのテンソルフロー機械学習チュートリアルを実行しているときにこのエラーに遭遇しました(私はPythonを初めて使用するので、あなたの答えは大歓迎です)tensorflow.org/tutorials/mnist/beginners/index.md
クリススミス

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変更しました。そうです、これはPython3以降のバージョンでも同じになる可能性があります。
Martin Thoma 2016

コメントへのコメント(「>= 3Python3ではありません...」):チェックしているので、Python4に関する懸念は有効ではありません。
マーティンR.

@MartinR。というか、...、Python4に関するメモは>= 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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.