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,引起的除零报错。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值