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的类变量和成员变量用法实例教程
Aug 25 Python
Python 文件管理实例详解
Nov 10 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
Python双向循环链表实现方法分析
Jul 30 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
python实现手势识别的示例(入门)
Apr 15 Python
Django实现图片上传功能步骤解析
Apr 22 Python
Python中的__init__作用是什么
Jun 09 Python
python中执行smtplib失败的处理方法
Jul 01 Python
基于Python的EasyGUI学习实践
May 07 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函数
2006/10/09 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
js 字符串操作函数
2009/07/25 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
python如何让类支持比较运算
2018/03/20 Python
python pillow模块使用方法详解
2019/08/30 Python
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
一篇.NET面试题
2014/09/29 面试题
总监职责范文
2013/11/09 职场文书
出纳岗位职责
2013/11/09 职场文书
项目工作说明书
2014/07/29 职场文书
抗洪救灾标语
2014/10/08 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
三下乡活动心得体会
2016/01/23 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL