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用fork来创建子进程注意事项
Jul 03 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
python2 与python3的print区别小结
Jan 16 Python
Flask实现跨域请求的处理方法
Sep 27 Python
python找出完数的方法
Nov 12 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
Django中的静态文件管理过程解析
Aug 01 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
Python爬虫之爬取最新更新的小说网站
May 06 Python
Python 中的Sympy详细使用
Aug 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
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
2020/08/05 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
python实现人机五子棋
2020/03/25 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
公务员培训自我鉴定
2014/02/01 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
教师个人读书活动总结
2014/07/08 职场文书
海洋科学专业求职信
2014/08/10 职场文书
保密工作承诺书
2014/08/29 职场文书
领导班子整改方案
2014/10/25 职场文书
档案管理员岗位职责
2015/02/12 职场文书
回复函格式及范文
2015/07/14 职场文书
排球赛新闻稿
2015/07/17 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL