python基于http下载视频或音频


Posted in Python onJune 20, 2018

一、简介

这里介绍使用python基于http下载视频或音频。

二、关键点

1、断点续传

视频或音频文件一般比较大,所以通过需要断点续传。方式通过在http的header里添加Range字段,指示接下来需要接收文件的位置。

2、判断结束

这里采用读取response的content-length字段,若当前报文长度小于前次报文长度,或者已接收文件等于当前报文长度,则可以认为视频接收完成。

三、示例代码

import os
import requests

def do_load_media(url, path):
  try:
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.3.2.1000 Chrome/30.0.1599.101 Safari/537.36"}
    pre_content_length = 0
    # 循环接收视频数据
    while True:
      # 若文件已经存在,则断点续传,设置接收来需接收数据的位置
      if os.path.exists(path):
        headers['Range'] = 'bytes=%d-' % os.path.getsize(path)
      res = requests.get(url, stream=True, headers=headers)

      content_length = int(res.headers['content-length'])
      # 若当前报文长度小于前次报文长度,或者已接收文件等于当前报文长度,则可以认为视频接收完成
      if content_length < pre_content_length or (
          os.path.exists(path) and os.path.getsize(path) == content_length):
        break
      pre_content_length = content_length

      # 写入收到的视频数据
      with open(path, 'ab') as file:
        file.write(res.content)
        file.flush()
        print('receive data,file size : %d  total size:%d' % (os.path.getsize(path), content_length))
  except Exception as e:
    print(e)


def load_media():
  url = 'http://k.youku.com/player/getFlvPath/sid/051446875256330ba12be_00/st/flv/fileid/030002080056EECA04F69A03BAF2B1BBADCA22-B1B9-E915-C03B-B0E7B0726C73?K=ae8e9a4d0f294dce282cef20&hd=0&myp=0&ts=377&ypp=0&ctype=30&ev=1&token=3759&oip=826403039&did=9e701e2baea8d466300184129d27d5d8&ep=AqAHzTJcifjAG0w8gO6bow3Mo5jVCyWrke5yFUQ5ZxOD3KGnS9WeSH2XvfdzTgOmgcPdl%2BVjzD29GUC%2BqeDjFxCFXBPHdIgGvhDtKk064s9iV0vxt4B0XNY39jlBH%2BCK'
  path = r'E:/test.mp4'
  do_load_media(url, path)
  pass


def main():
  load_media()
  pass


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的yield使用方法
Feb 11 Python
Python 专题二 条件语句和循环语句的基础知识
Mar 19 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
python中的协程深入理解
Jun 10 Python
在pycharm中实现删除bookmark
Feb 14 Python
python opencv进行图像拼接
Mar 27 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
Python可以用来做什么
Nov 23 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
python字符串的多行输出的实例详解
Jun 08 Python
Python pandas求方差和标准差的方法实例
Aug 04 Python
python实现下载pop3邮件保存到本地
Jun 19 #Python
python+POP3实现批量下载邮件附件
Jun 19 #Python
python实现批量解析邮件并下载附件
Jun 19 #Python
Python3使用SMTP发送带附件邮件
Jun 16 #Python
Python3使用turtle绘制超立方体图形示例
Jun 19 #Python
python3使用SMTP发送HTML格式邮件
Jun 19 #Python
python3.X 抓取火车票信息【修正版】
Jun 19 #Python
You might like
PHP操作数组相关函数
2011/02/03 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
JavaScript中的this机制
2016/01/30 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
js面向对象编程总结
2017/02/16 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
python分割列表(list)的方法示例
2017/05/07 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
项目专员岗位职责
2013/12/04 职场文书
党委班子对照检查材料
2014/08/19 职场文书
观后感的写法
2015/06/19 职场文书
病假证明模板
2015/06/19 职场文书
python中%格式表达式实例用法
2021/06/18 Python
Nginx速查手册及常见问题
2022/04/07 Servers