【发布时间】:2017-04-27 15:47:43
【问题描述】:
我正在尝试在万维网上搜索此答案,但我觉得答案可能是否定的。我正在使用 Python 3.5 和一个名为 urllib.request 的库以及一个名为 urllib.request.urlopen(url) 的方法来打开链接并下载文件。
如果文件超过 200MB,最好能对此进行某种程度的衡量。我正在查看 API here,并没有看到任何带有钩子的参数。
这是我的代码:
downloadURL = results[3] #got this from code earlier up
rel_path = account + '/' + eventID + '_' + title + '.mp4'
filename_abs_path = os.path.join(script_dir, rel_path)
print('>>> Downloading >>> ' + title)
# Download .mp4 from a url and save it locally under `file_name`:
with urllib.request.urlopen(downloadURL) as response, open(filename_abs_path, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
如果有人认为我可能有进度条或者唯一的方法是使用不同的库,他们可以提供见解吗?我希望使代码保持简短和简单,我只需要一些指示正在下载的文件。感谢您提供的任何帮助!
【问题讨论】:
-
这实际上与
urllib无关,是吗?而是问题在于copyfileobj()不提供进度回调。那么dup? -
我建议切换到python requests
-
为了构建一个进度条,您需要知道您将要下载的数据的总大小及其下载部分的当前大小。第一个可以从
Content-Length标头中检索。您可以通过reading 指定大小的数据块并计算块长度的总和来计算第二个。requests库可让您read来自连接的数据块。
标签: python urllib python-3.5