用什么命令替代 urllib.request.urlretrieve?

39 投票
4 回答
42344 浏览
提问于 2025-04-17 16:49

我现在正在写一个脚本,用来从一个网址下载文件。

import urllib.request
urllib.request.urlretrieve(my_url, 'my_filename')

文档中提到的 urllib.request.urlretrieve 说:

以下的函数和类是从Python 2的模块urllib移植过来的(而不是urllib2)。将来可能会被淘汰。

所以我想避免使用它,这样我就不需要在不久的将来重写这段代码。

我找不到像 download(url, filename) 这样的其他接口在标准库中。如果 urlretrieve 在Python 3中被认为是旧接口,那有什么替代的方法呢?

4 个回答

3

还有一种解决方案,不需要使用 shutil 这个库,也不需要其他外部库,比如 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)
27

requests库在这方面非常好用。不过,要安装它需要一些依赖项。下面是一个例子。

import requests
r = requests.get('imgurl')
with open('pic.jpg','wb') as f:
  f.write(r.content)
33

不推荐使用是一回事,而将来可能会不推荐使用又是另一回事。如果这个功能满足你的需求,那我建议你继续使用 urlretrieve

不过,你也可以使用 shutil.copyfileobj

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)

撰写回答