python 使用iter_content實現視頻下載

先看代碼

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,引起的除零報錯。

發佈了69 篇原創文章 · 獲贊 33 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章