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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python将字符串转换成数组的方法
Apr 29 Python
python如何修改装饰器中参数
Mar 20 Python
python模块导入的细节详解
Dec 10 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
Series和DataFrame使用简单入门
Nov 13 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
Matplotlib绘制混淆矩阵的实现
May 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
VFP与其他应用程序的集成
2006/10/09 PHP
php 中include()与require()的对比
2006/10/09 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
php的大小写敏感问题整理
2011/12/29 PHP
php分页函数示例代码分享
2014/02/24 PHP
php使用codebase生成随机数
2014/03/25 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取当前计算机cpu数量的方法
2015/04/18 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
数据员岗位职责
2013/11/19 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
鼓舞士气的口号
2014/06/16 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
学校工作推荐信范文
2014/07/11 职场文书
生活部的活动方案
2014/08/19 职场文书
运动会稿件100字
2014/09/24 职场文书
音乐教师求职信范文
2015/03/20 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书