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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
分析Python中解析构建数据知识
Jan 20 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
python 美化输出信息的实例
Oct 15 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
Python实现中值滤波去噪方式
Dec 18 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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
php如何实现只替换一次或N次
2015/10/29 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
质量工程师岗位职责
2013/11/16 职场文书
装修致歉信
2014/01/15 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
共产党员承诺书
2014/03/25 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
考试作弊检讨
2015/01/27 职场文书
大学生求职信怎么写
2015/03/19 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
python中的random模块和相关函数详解
2022/04/22 Python