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中的join()方法的使用
May 19 Python
Python中Django框架利用url来控制登录的方法
Jul 25 Python
python实现三次样条插值
Dec 17 Python
python 获取url中的参数列表实例
Dec 18 Python
Python装饰器语法糖
Jan 02 Python
Python实现某论坛自动签到功能
Aug 20 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Python3 webservice接口测试代码详解
Jun 23 Python
python中的yield from语法快速学习
Nov 06 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
python获得图片base64编码示例
2014/01/16 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
python实现月食效果实例代码
2019/06/18 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
python爬虫如何解决图片验证码
2021/02/14 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
语文高效课堂实施方案
2014/05/03 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
力克胡哲观后感
2015/06/10 职场文书
生产实习心得体会范文
2016/01/22 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
oracle索引总结
2021/09/25 Oracle
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python