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在Console下显示文本进度条的方法
Feb 14 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
python输入错误后删除的方法
Oct 12 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 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
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
浅谈Vue.js组件(二)
2019/04/09 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
Python中的魔法方法深入理解
2014/07/09 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
深入理解Django的中间件middleware
2018/03/14 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
高中数学教学反思
2014/01/30 职场文书
运动会开幕式解说词
2014/02/05 职场文书
个人收入证明模板
2014/09/18 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
Golang 遍历二叉树
2022/04/19 Golang
Linux安装Docker详细教程
2022/07/07 Servers
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS