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操作redis的方法
Jul 07 Python
python Flask实现restful api service
Dec 04 Python
Python读取word文本操作详解
Jan 22 Python
Python语言的变量认识及操作方法
Feb 11 Python
高效使用Python字典的清单
Apr 04 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python smtplib发送多个email联系人的实现
Oct 09 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
CheckBox 如何实现全选?
2006/06/23 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
简单使用Python自动生成文章
2014/12/25 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
会计出纳岗位职责
2013/12/25 职场文书
协议书范本
2014/04/23 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python