python爬取m3u8连接的视频


Posted in Python onFebruary 28, 2018

本文为大家分享了python爬取m3u8连接的视频方法,供大家参考,具体内容如下

要求:输入m3u8所在url,且ts视频与其在同一路径下

#!/usr/bin/env/python
#_*_coding:utf-8_*_
#Data:17-10-08
#Auther:苏莫
#Link:http://blog.csdn.net/lingluofengzang
#PythonVersion:python2.7
#filename:download_movie.py

import os
import sys
import requests

reload(sys)
sys.setdefaultencoding('utf-8')

# 功能:爬取m3u8格式的视频

# 检查存储路径是否正常
def check_path(_path):
  # 判断存储路径是否存在
  if os.path.isdir(_path) or os.path.isabs(_path):
    # 判断存储路径是否为空
    if not os.listdir(_path):
      return _path

    else:

      print u'>>>[-] 目标文件不为空,将清空目标文件,是否更换路径?'
      flag = raw_input('>>>[*] Yes:1 No:2 \n>>>[+] [2]')

      try:
        if flag == '1':
          _path = raw_input(unicode('>>>[+] 请输入目标文件路径。\n>>>[+] ').encode('gbk'))
          check_path(_path)
        else:
          # 清空存储路径
          os.system('rd /S /Q ' + _path)
          os.system('mkdir ' + _path)
          return _path
      except Exception as e:
        print e
        exit(0)

  else:
    os.makedirs(_path)
    return _path

# 获取ts视频的爬取位置
def get_url(_url, _path):

  all_url = _url.split('/')
  url_pre = '/'.join(all_url[:-1]) + '/'
  url_next = all_url[-1]

  os.chdir(_path)
  # 获取m3u8文件
  m3u8_txt = requests.get(_url, headers = {'Connection':'close'})
  with open(url_next, 'wb') as m3u8_content:
    m3u8_content.write(m3u8_txt.content)
  # 提取ts视频的url
  movies_url = []
  _urls = open(url_next, 'rb')
  for line in _urls.readlines():
    if '.ts' in line:
      movies_url.append(url_pre + line[:-1])
    else:
      continue

  _urls.close()
  return movies_url

# 爬取ts视频
def download_movie(movie_url, _path):
  os.chdir(_path)
  print '>>>[+] downloading...'
  print '-' * 60
  error_get = []

  for _url in movie_url:
    # ts视频的名称
    movie_name = _url.split('/')[-1][-6:]

    try:
      # 'Connection':'close' 防止请求端口占用
      # timeout=30  防止请求时间超长连接
      movie = requests.get(_url, headers = {'Connection':'close'}, timeout=60)
      with open(movie_name, 'wb') as movie_content:
        movie_content.writelines(movie)
      print '>>>[+] File ' + movie_name + ' done'
    # 捕获异常,记录失败请求
    except:
      error_get.append(_url)
      continue
  # 如果没有不成功的请求就结束
  if error_get:
    print u'共有%d个请求失败' % len(file_list)
    print '-' * 60
    download_movie(error_get, _path)
  else:
    print '>>>[+] Download successfully!!!'

if __name__ == '__main__':
  try:

    _url = raw_input(unicode('>>>[+] 请输入指定的[.m3u8]目标URL。\n>>>[+] ').encode('gbk'))
    _path = raw_input(unicode('>>>[+] 请输入存储目标文件路径。\n>>>[+] ').encode('gbk'))

    storage_path = check_path(_path)
    movie_url = get_url(_url, storage_path)
    download_movie(movie_url, storage_path)

  except Exception as e:
    print e

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python下如何让web元素的生成更简单的分析
Jul 17 Python
Python内置的字符串处理函数整理
Jan 29 Python
跟老齐学Python之网站的结构
Oct 24 Python
python中随机函数random用法实例
Apr 30 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 Python
logging level级别介绍
Feb 21 Python
python中使用input()函数获取用户输入值方式
May 03 Python
python3读取autocad图形文件.py实例
Jun 05 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python3中对json格式数据的分析处理
Jan 28 Python
对PyTorch中inplace字段的全面理解
May 22 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 #Python
浅谈Python中的私有变量
Feb 28 #Python
python中logging包的使用总结
Feb 28 #Python
深入理解Python爬虫代理池服务
Feb 28 #Python
python实现装饰器、描述符
Feb 28 #Python
python安装教程
Feb 28 #Python
深入理解Python 关于supper 的 用法和原理
Feb 28 #Python
You might like
php函数之子字符串替换 str_replace
2011/03/23 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
JS实现self的resend
2010/07/22 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
angular十大常见问题
2017/03/07 Javascript
Vue.js用法详解
2017/11/13 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
python之yield表达式学习
2014/09/02 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python实现共轭梯度法
2019/07/03 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python yield的用法实例分析
2020/03/06 Python
运动会入场解说词
2014/02/07 职场文书
综治工作心得体会
2014/09/11 职场文书
医德考评自我评价
2014/09/14 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书