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中的内置常量
May 20 Python
Python实现完整的事务操作示例
Jun 20 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
基于python绘制科赫雪花
Jun 22 Python
Python走楼梯问题解决方法示例
Jul 25 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
用python实现一个简单的验证码
Dec 09 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
星际争霸任务指南——人族
2020/03/04 星际争霸
中国的第一台收音机
2021/03/01 无线电
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
js loading加载效果实现代码
2009/11/24 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
分析python切片原理和方法
2017/12/19 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
自我评价怎么写正确呢?
2013/12/02 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
面试后感谢信
2014/02/01 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
学校食堂标语
2014/10/06 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers