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异步回调机制实现和使用方法
Nov 26 Python
Python中unittest用法实例
Sep 25 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
python实现录音小程序
Oct 26 Python
python 保存float类型的小数的位数方法
Oct 17 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Cython编译python为so 代码加密示例
Dec 23 Python
python的sys.path模块路径添加方式
Mar 09 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
python输出国际象棋棋盘的实例分享
Nov 26 Python
宝塔更新Python及Flask项目的部署
Apr 11 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
创建Django项目图文实例详解
2019/06/06 Python
python安装pil库方法及代码
2019/06/25 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
django云端留言板实例详解
2019/07/22 Python
浅析python redis的连接及相关操作
2019/11/07 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
大学生入党自我鉴定
2013/10/31 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python