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创建系统目录的方法
Mar 11 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python进行数据提取的方法总结
Aug 22 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
Python3实现建造者模式的示例代码
Jun 28 Python
python中二分查找法的实现方法
Dec 06 Python
Python爬虫回测股票的实例讲解
Jan 22 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 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更新mysql后获取改变行数的方法
2014/12/25 PHP
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
波兰在线运动商店:YesSport
2020/07/23 全球购物
医学生实习自荐信
2013/10/01 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
工作会议方案
2014/05/21 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
2014年工程部工作总结
2014/11/25 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
会议主持词开场白
2015/05/28 职场文书
董事长致辞
2015/07/29 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
html5调用摄像头实例代码
2021/06/28 HTML / CSS
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS