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最基本的数据类型以及对元组的介绍
Apr 14 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Python实现将xml导入至excel
Nov 20 Python
Python机器学习之决策树算法
Dec 22 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
Puppeteer使用示例详解
Jun 20 Python
django 中QuerySet特性功能详解
Jul 25 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
Aug 05 Python
基于python二叉树的构造和打印例子
Aug 09 Python
解决python运行启动报错问题
Jun 01 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
python画条形图的具体代码
Apr 20 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php桌面中心(一) 创建数据库
2007/03/11 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
CI框架常用方法小结
2016/05/17 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
VSCode 配置uni-app的方法
2020/07/11 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
食品安全处置方案
2014/06/14 职场文书
2014年部门工作总结
2014/11/12 职场文书
vue动态绑定style样式
2022/04/20 Vue.js