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爬虫的基本写法
Jan 08 Python
解决Python一行输出不显示的问题
Dec 03 Python
在python中实现强制关闭线程的示例
Jan 22 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python监控nginx端口和进程状态
Sep 06 Python
python使用rsa非对称加密过程解析
Dec 28 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
django queryset 去重 .distinct()说明
May 19 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
Yii实现简单分页的方法
2016/04/29 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
在python中pandas的series合并方法
2018/11/12 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
什么是Smart Navigation?
2016/07/03 面试题
检举信的格式及范文
2014/04/04 职场文书
社会学专业求职信
2014/07/17 职场文书
中标通知书格式
2015/04/17 职场文书
居安思危观后感
2015/06/11 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python