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使用any判断一个对象是否为空的方法
Nov 19 Python
Python聊天室实例程序分享
Jan 05 Python
python 内置函数filter
Jun 01 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
python取余运算符知识点详解
Jun 27 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
python比较2个xml内容的方法
2015/05/11 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
python 修改本地网络配置的方法
2019/08/14 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
初三家长会邀请函
2014/01/18 职场文书
路政管理求职信
2014/06/18 职场文书
党员个人年度总结
2015/02/14 职场文书
春节慰问信范文
2015/02/15 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android