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实现股市信息下载的方法
Jun 15 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
浅谈Python中eval的强大与危害
Mar 13 Python
详解python运行三种方式
May 13 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
Django 开发环境配置过程详解
Jul 18 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
python3中sys.argv的实例用法
Apr 24 Python
python下载的库包存放路径
Jul 27 Python
Python第三方库安装缓慢的解决方法
Feb 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
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python中return语句用法实例分析
2015/08/04 Python
利用aardio给python编写图形界面
2017/08/21 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
python 生成器需注意的小问题
2020/09/29 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
违纪学生保证书
2015/02/27 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
4种方法python批量修改替换列表中元素
2022/04/07 Python
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python