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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
用Python代码来解图片迷宫的方法整理
Apr 02 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
初步介绍Python中的pydoc模块和distutils模块
Apr 13 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
python微信公众号开发简单流程实现
Mar 09 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
Pytest中conftest.py的用法
Jun 27 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
php命令行模式代码实例详解
2021/02/26 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
python赋值操作方法分享
2013/03/23 Python
wxPython中listbox用法实例详解
2015/06/01 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
简单实现python进度条脚本
2017/12/18 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
Python3.4解释器用法简单示例
2019/03/22 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python安装后的目录在哪里
2020/06/21 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
商务英语应届生自我鉴定
2013/12/08 职场文书
就业意向书范文
2014/04/01 职场文书
房屋出租协议书
2014/04/10 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
湘江北去观后感
2015/06/15 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL