我正在尝试在万维网上搜索这个答案,但我觉得答案可能不是。我正在使用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)
如果有人认为我可能有进度条或者唯一的方法是使用不同的库,那么任何人都可以提供见解吗?我希望保持代码简短,简单,我只需要指示正在下载的文件。感谢您提供的任何帮助!
答案 0 :(得分:2)
@tdelaney的答案很好,但是在Python 3.8中,您必须使用getvalue()方法而不是read():
import io, urllib.request
with urllib.request.urlopen(Url) as Response:
Length = Response.getheader('content-length')
BlockSize = 1000000 # default value
if Length:
Length = int(Length)
BlockSize = max(4096, Length // 20)
print("UrlLib len, blocksize: ", Length, BlockSize)
BufferAll = io.BytesIO()
Size = 0
while True:
BufferNow = Response.read(BlockSize)
if not BufferNow:
break
BufferAll.write(BufferNow)
Size += len(BufferNow)
if Length:
Percent = int((Size / Length)*100)
print(f"download: {Percent}% {Url}")
print("Buffer All len:", len(BufferAll.getvalue()))
答案 1 :(得分:1)
如果响应包含Dim xName As Range
Set xName = ThisWorkbook.Names("Product").RefersToRange.SpecialCells(xlCellTypeVisible)
Debug.Print xName.Count
Debug.Print xName(3)
,您可以读取块中的传入数据并计算完成百分比。不幸的是,“chunk”响应的Web服务器并不总是提供内容长度,因此它并不总是有效。这是一个测试的例子。
content-length