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实现进程间通信简单实例
Jul 23 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
Mar 31 Python
python爬虫实战之最简单的网页爬虫教程
Aug 13 Python
Python实现曲线点抽稀算法的示例
Oct 12 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python 查看文件的读写权限方法
Jan 23 Python
python字符串与url编码的转换实例
May 10 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
Python实现查找数据库最接近的数据
Jun 08 Python
python爬虫beautifulsoup解析html方法
Dec 07 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入门之常量简介和系统常量
2014/05/12 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
python中模块查找的原理与方法详解
2017/08/11 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python retrying模块的使用方法详解
2019/09/25 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
生产班组长岗位职责
2014/01/05 职场文书
测试工程师职业规划书
2014/02/06 职场文书
业务内勤岗位职责
2014/04/30 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
幼儿园六一主持词
2015/06/30 职场文书
离婚协议书范文2016
2016/03/18 职场文书
学生会自荐信
2019/05/16 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle