What command to use instead of urllib.request.urlretrieve?
Solution 1
Deprecated is one thing, might become deprecated at some point in the future is another.
If it suits your needs, I'd continuing using urlretrieve
.
That said, you can do without it:
from urllib.request import urlopen
from shutil import copyfileobj
with urlopen(my_url) as in_stream, open('my_filename', 'wb') as out_file:
copyfileobj(in_stream, out_file)
Solution 2
requests is really nice for this. There are a few dependencies though to install it. Here is an example.
import requests
r = requests.get('imgurl')
with open('pic.jpg','wb') as f:
f.write(r.content)
Solution 3
Another solution without the use of shutil
and no other external libraries like requests
.
import urllib.request
image_url = "https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png"
response = urllib.request.urlopen(image_url)
image = response.read()
with open("image.png", "wb") as file:
file.write(image)
Admin
Updated on August 21, 2021Comments
-
Admin over 2 years
I'm currently writing a script that downloads a file from a URL
import urllib.request urllib.request.urlretrieve(my_url, 'my_filename')
The docs
urllib.request.urlretrieve
state:The following functions and classes are ported from the Python 2 module urllib (as opposed to urllib2). They might become deprecated at some point in the future.
Therefore I would like to avoid it so I don't have to rewrite this code in the near future.
I'm unable to find another interface like
download(url, filename)
in standard libraries. Ifurlretrieve
is considered a legacy interface in Python 3, what is the replacement?