AttributeError: 'module' object has no attribute 'urlretrieve'
Asked Answered
F

4

107

I am trying to write a program that will download mp3's off of a website then join them together but whenever I try to download the files I get this error:

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'

The line that is causing this problem is

raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")
Faroff answered 31/7, 2013 at 3:13 Comment(0)
S
258

As you're using Python 3, there is no urllib module anymore. It has been split into several modules.

This would be equivalent to urlretrieve:

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

urlretrieve behaves exactly the same way as it did in Python 2.x, so it'll work just fine.

Basically:

  • urlretrieve saves the file to a temporary file and returns a tuple (filename, headers)
  • urlopen returns a Request object whose read method returns a bytestring containing the file contents
Subassembly answered 31/7, 2013 at 3:26 Comment(2)
If I wanted to download the .mp3 files into a list would this still work?Faroff
Ran across this error when working through google's tensorflow machine learning tutorial (I'm new to python so your answer is greatly appreciated) tensorflow.org/tutorials/mnist/beginners/index.mdBanc
T
12

A Python 2+3 compatible solution 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")
Trustful answered 7/12, 2015 at 7:10 Comment(3)
@tim654321 I changed it. You are right, there is a chance that this will be the same for Python 3 and later versions.Trustful
A comment to your comment ("Not Python 3..."): Since you are checking >= 3, the concern regarding Python4 is not a valid one.Hectorhecuba
@MartinR. or rather, ..., the notes about Python 4 should be in the >= 3 block instead.Pewter
A
5

Suppose you have following lines of code

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

If you are receiving following error message

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

Then you should try following code to fix the issue:

import urllib.request
MyUrl = "www.google.com" #Your url goes here
urllib.request.urlretrieve(MyUrl)
Alible answered 21/2, 2018 at 0:14 Comment(0)
C
1

Running the 2to3 utility will fix the problem:

2to3 -w -n file.py

FYI, that command will write the results to disk and not backup the file.

Croupier answered 29/1 at 16:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.