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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python 剪切移动文件的实现代码
Aug 02 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python并发:多线程与多进程的详解
Jan 24 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python写一个随机点名软件的实例
Nov 28 Python
python使用配置文件过程详解
Dec 28 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
python操作redis数据库的三种方法
Sep 10 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
删除无限级目录与文件代码共享
2006/07/12 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
前端必学之PHP语法基础
2016/01/01 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PDO::quote讲解
2019/01/29 PHP
PHP attributes()函数讲解
2019/02/03 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
地理科学专业毕业生求职信
2013/10/15 职场文书
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
世界名著读书笔记
2015/06/25 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js
java实现web实时消息推送的七种方案
2022/07/23 Java/Android
Java获取字符串编码格式实现思路
2022/09/23 Java/Android