先看代碼
video_url = 'http://v1-default.ixigua.com/4e7d18412a0d03f316e9ec84c47a2938/5dcb87bf/video/tos/cn/tos-cn-v-0064/05d51f7a7af4480e8677f2b22b836fa8/'
# 初始下載大小爲0
downsize = 0
rsp = requests.get(video_url, stream=True)
# 獲取開始下載前的時間戳
startTime = time.time()
with open('2.mp4', 'wb') as f:
# 邊下載邊存硬盤, 10000 單位爲B 該數字由自己設置 可以自由調整爲可以適合的用例的數字
for i in rsp.iter_content(100000):
if i:
f.write(i)
downsize += len(i)
line = 'downloading %d KB/s - %.2f MB, 共 %.2f MB'
line = line % (downsize / 1024 /(time.time() - startTime) , downsize / 1024 / 1024, downsize / 1024 / 1024)
print(line)
print('下載完成')
效果圖:看右下角,打印了1455行,挺麻煩的
代碼裏改成:
print(line, end='\r')
就會打印一行消失一行。
我們看到打印日誌:138.09MB 138.19MB 138.28MB
這其實取決於:rsp.iter_content(100000)
設置的值爲10000,單位爲B,換成MB也就是0.1不到,因爲它是1024進制的。
如果該值過小,還會引起報錯:
ZeroDivisionError: float division by zero
這是因爲,兩個時間戳之間差距太小,導致相減爲0,引起的除零報錯。