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中星号变量的几种特殊用法
Sep 07 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
Python之批量创建文件的实例讲解
May 10 Python
Python 实现域名解析为ip的方法
Feb 14 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
python写程序统计词频的方法
Jul 29 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
Python实现随机爬山算法
Jan 29 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集成FCK的函数代码
2008/09/27 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
javascript中常用编程知识
2013/04/08 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
争当四好少年演讲稿
2014/09/13 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python