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连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
python实现装饰器、描述符
Feb 28 Python
python函数的万能参数传参详解
Jul 26 Python
pytorch索引查找 index_select的例子
Aug 18 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
pandas取dataframe特定行列的实现方法
May 24 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
Ajax PHP分页演示
2007/01/02 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python微信公众号之关键词自动回复
2018/06/15 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python 并发下载器实现方法示例
2019/11/22 Python
python实现扫雷游戏的示例
2020/10/20 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
库房主管岗位职责
2013/12/31 职场文书
岗位廉政承诺书
2014/03/27 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
新郎婚礼致辞
2015/07/27 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
入门学习Go的基本语法
2021/07/07 Golang