参考http://blog.sina.com.cn/s/blog_81bdf4030102y4fa.html

尝试的linux环境

1.安装python3,原先安装了python2.7.这里需要ln -s 更改下软连接(改之前移除2.7链接),使得用python命令的时候调用的是python3的而不是python2.7

2.用pip3 安装Crypto 用来解密文件(.ts的视频需要解密,无法直接播放)

3.找到m3u8文件,此步骤需要我们手动操作:

刷新视频页面即可找到index.m3u8文件,然后按f12查看控制台,

找到后右键复制地址到下面代码中的_url变量即可

解释:m3u8文件记录了ts视频的解码KEY地址和各视频切片的文件名,该网址网大的m3u8文件格式如下

不同网站的m3u8文件格式可能不一样。

此处我们需要提取解码key,并拼接出各个视频文件的地址即可,代码中已经实现,无需操作。

4.视频处理-合并视频

程序将提取到的小切片ts视频,合并成一个大的ts文件。这种格式可以直接使用 windows media player 播放,但是用QQ视频播放的话会没有声音。

再把ts转诚mp4

linux:安装ffmpeg 工具进行转换。

yum安装的时候提示没有这个安装包,需要先安装下epel-release.再用yum 安装就有了。

然后根据上诉逻辑的python代码如下(针对windows的,所以目录还不对)

# -*- coding: UTF-8 -*-
import os
import sys
import requests
import datetime
from Crypto.Cipher import AES
 
def download(url):
    download_path = os.getcwd() + "/download"  #os.getcwd()返回当前工作目录
    if not os.path.exists(download_path):
        os.mkdir(download_path)
        
    #新建日期文件夹
    file_time=datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
    download_path = os.path.join(download_path, file_time)
    #print download_path
    os.mkdir(download_path)
        
    all_content = requests.get(url).text  # 获取第一层M3U8文件内容
    fd = open(download_path+'/indexs.txt', 'w')  #把所有的.ts文件名称都放在这个文件。

if "#EXTM3U" not in all_content:
        raise BaseException("非M3U8的链接")
 
    if "EXT-X-STREAM-INF" in all_content:  # 第一层
        file_line = all_content.split("\n")
        for line in file_line:
            if '.m3u8' in line:
                url = url.rsplit("/", 1)[0] + "/" + line # 拼出第二层m3u8的URL
                all_content = requests.get(url).text
 
    file_line = all_content.split("\n")
 
    unknow = True
    key = ""   
    for index, line in enumerate(file_line): # 第二层
        if "#EXT-X-KEY" in line:  # 找解密Key
            method_pos = line.find("METHOD")
            comma_pos = line.find(",")
            method = line[method_pos:comma_pos].split('=')[1]
            print ("Decode Method:", method)
            
            uri_pos = line.find("URI")
            quotation_mark_pos = line.rfind('"')
            key_path = line[uri_pos:quotation_mark_pos].split('"')[1]
            print (key_path)
            key_url=key_path
            res = requests.get(key_url)
            key = res.content
            print ("key:" , key)            
        if "EXTINF" in line: # 找ts地址并下载
            unknow = False
            pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL
            print (pd_url)            
            res = requests.get(pd_url)
            c_fule_name = file_line[index + 1].rsplit("/", 1)[-1]            
            fd.write('file  \''+c_fule_name+'\'\n')
            print(c_fule_name)
            if len(key): # AES 解密
                cryptor = AES.new(key, AES.MODE_CBC, key)  
                with open(os.path.join(download_path, c_fule_name), 'ab') as f:
                    f.write(cryptor.decrypt(res.content))
            else:
                with open(os.path.join(download_path, c_fule_name), 'ab') as f:
                    f.write(res.content)
                    f.flush()
    if unknow:
        raise BaseException("未找到对应的下载链接")
    else:
        print ("下载完成")
    
    
    fd.close()
    merge_file(download_path)
    
def merge_file(path):
    os.chdir(path)  #进入到这个目录
    os.system('ffmpeg -f concat -i indexs.txt -c copy new.ts')  #把文件合并成一个文件
    os.system('ffmpeg -i new.ts -q 1 -c copy output.mp4')  #转换ts为mp4格式
    os.system('del /Q *.ts')
    
if __name__ == '__main__': 
    _url="https://wangda.andedu.net/default/M00/00/61/...../index.m3u8" #这里的链接  需要换成要爬取的m3u8文件地址。
    download(_url)

还存在小问题,,,,目前

如何爬取ajax实时加载多个ts文件的视频相关推荐

  1. python翻页功能url不变_爬取Ajax动态加载和翻页时url不变的网页

    这两天投了一家公司的爬虫实习生,笔试题是完成一个爬虫的小需求.网站没有什么反爬的高级技巧.但是有非常常见的,并不是针对我们爬虫的,却让我们新手很难理解的ajax动态加载技术和乍一看不明白的翻页时不变的 ...

  2. 爬取网页动态加载的评论

    超时的处理 爬虫在向服务器请求时,若是服务器没有顺利返回响应,爬虫就会一直等待 有时这种长时间等待是没有没价值的 在requests.get()里添加参数,设置一个等待时间,若是响应超过这段时间还没有 ...

  3. python爬取京东数据加载失败_python 爬京东数据时,无法登陆。

    想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...

  4. htmlunit爬取js异步加载后的页面

    直接上代码: 一. index.html  调用后台请求获取content中的内容. <html> <head><script type="text/javas ...

  5. python爬取京东数据加载失败_Python爬取京东商品数据

    对京东某一商品信息页面的HTML代码进行分析,可以发现它的图书产品信息页面都含有这样一段代码(不同类的商品页面有些不同): window.pageConfig={compatible:true,sea ...

  6. python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...

    1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...

  7. selenium爬取Ajax加载的网页(以微博为例)

    Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...

  8. 爬取ajax加载的豆瓣电影

    (一)前提:找到ajax异步加载的包接口,注意第一个电影名 我们把Request URL网址复制到地址栏得到: 上图是json格式数据,且第一个电影一致,说明我们找到了正确的ajax的json接口 出 ...

  9. Python爬取东方财富网任意股票任意时间段的Ajax动态加载股票数据

    导言 最近由于需求想爬取以下东方财富网的股票数据,但是发现没有想象那么简单,接下来我会讲述一下我遇到的问题以及是如何解决,最后成功的爬出了想要的数据. 查看网页源码 首先我们F12打开东方财富网网页源 ...

最新文章

  1. 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
  2. 完成一个MVC+Nhibernate+Jquery-EasyUI信息发布系统
  3. Matlab-重构和重新排列数组
  4. 前去哪儿产品总监白羽:做SaaS产品需要注意哪些坑?
  5. 安卓手机管理器_电脑文件快速搜索有everything,那手机呢?
  6. 计算机网络技术专业发展现状,计算机网络技术的发展现状和前景
  7. oracle 去重_超详细的四类数据库去重实现方案汇总,值得收藏
  8. win7下的python2.7和pip的环境安装
  9. 小米无线网卡linux驱动下载,Linux下安装MT7601U无线网卡驱动
  10. 在ubantu16.04系统下安装ros操作系统
  11. 十折交叉验证和混淆矩阵
  12. PHP--ThinkPHP6.0怎么打开debug模式
  13. 内存带宽测试工具 mbw
  14. 改变世界的webp图片技术,节约你的流量和带宽
  15. liunx开发板使用交叉网线连接电脑,通过电脑连接外网的方法
  16. 用while输出1到100的偶数python_用while语句,求1到100的偶数之和
  17. 《捕鱼达人》游戏制作要点浅析(一) 思路分析
  18. 【软考-中级】系统集成项目管理工程师【总】
  19. ideaij 按内容查找文件
  20. RegNet: Designing Network Design Spaces

热门文章

  1. 基于CentOs的Hadoop集群全分布式部署
  2. mysql dba命令_MySQL DBA 管理常用命令
  3. chromedriver放在哪个目录下_Windows下ThinkPHP与Linux互通
  4. python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
  5. android iot代码设计,一个简单好用的Android Tab 设计与实现
  6. java webmethod_javax.xml.ws.WebServiceException:方法beaInvoke公开为WebMethod
  7. mac mysql 免密登录_Mac 免密登陆
  8. 【安利UI设计师】电商购物移动应用程序界面设计UI套件包,轻松完成项目需求。
  9. 海报中应用广泛的书法(手写)字体素材
  10. ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)