如何爬取ajax实时加载多个ts文件的视频
参考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文件的视频相关推荐
- python翻页功能url不变_爬取Ajax动态加载和翻页时url不变的网页
这两天投了一家公司的爬虫实习生,笔试题是完成一个爬虫的小需求.网站没有什么反爬的高级技巧.但是有非常常见的,并不是针对我们爬虫的,却让我们新手很难理解的ajax动态加载技术和乍一看不明白的翻页时不变的 ...
- 爬取网页动态加载的评论
超时的处理 爬虫在向服务器请求时,若是服务器没有顺利返回响应,爬虫就会一直等待 有时这种长时间等待是没有没价值的 在requests.get()里添加参数,设置一个等待时间,若是响应超过这段时间还没有 ...
- python爬取京东数据加载失败_python 爬京东数据时,无法登陆。
想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...
- htmlunit爬取js异步加载后的页面
直接上代码: 一. index.html 调用后台请求获取content中的内容. <html> <head><script type="text/javas ...
- python爬取京东数据加载失败_Python爬取京东商品数据
对京东某一商品信息页面的HTML代码进行分析,可以发现它的图书产品信息页面都含有这样一段代码(不同类的商品页面有些不同): window.pageConfig={compatible:true,sea ...
- python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...
1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...
- selenium爬取Ajax加载的网页(以微博为例)
Tip:我写了一篇直接构造请求获取微博数据的文章,不使用selenium,直接访问url获取到json数据,然后解析即可得到想要的数据的文章,请参考微博博主动态及相册的请求构造规律 ========= ...
- 爬取ajax加载的豆瓣电影
(一)前提:找到ajax异步加载的包接口,注意第一个电影名 我们把Request URL网址复制到地址栏得到: 上图是json格式数据,且第一个电影一致,说明我们找到了正确的ajax的json接口 出 ...
- Python爬取东方财富网任意股票任意时间段的Ajax动态加载股票数据
导言 最近由于需求想爬取以下东方财富网的股票数据,但是发现没有想象那么简单,接下来我会讲述一下我遇到的问题以及是如何解决,最后成功的爬出了想要的数据. 查看网页源码 首先我们F12打开东方财富网网页源 ...
最新文章
- 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
- 完成一个MVC+Nhibernate+Jquery-EasyUI信息发布系统
- Matlab-重构和重新排列数组
- 前去哪儿产品总监白羽:做SaaS产品需要注意哪些坑?
- 安卓手机管理器_电脑文件快速搜索有everything,那手机呢?
- 计算机网络技术专业发展现状,计算机网络技术的发展现状和前景
- oracle 去重_超详细的四类数据库去重实现方案汇总,值得收藏
- win7下的python2.7和pip的环境安装
- 小米无线网卡linux驱动下载,Linux下安装MT7601U无线网卡驱动
- 在ubantu16.04系统下安装ros操作系统
- 十折交叉验证和混淆矩阵
- PHP--ThinkPHP6.0怎么打开debug模式
- 内存带宽测试工具 mbw
- 改变世界的webp图片技术,节约你的流量和带宽
- liunx开发板使用交叉网线连接电脑,通过电脑连接外网的方法
- 用while输出1到100的偶数python_用while语句,求1到100的偶数之和
- 《捕鱼达人》游戏制作要点浅析(一) 思路分析
- 【软考-中级】系统集成项目管理工程师【总】
- ideaij 按内容查找文件
- RegNet: Designing Network Design Spaces
热门文章
- 基于CentOs的Hadoop集群全分布式部署
- mysql dba命令_MySQL DBA 管理常用命令
- chromedriver放在哪个目录下_Windows下ThinkPHP与Linux互通
- python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
- android iot代码设计,一个简单好用的Android Tab 设计与实现
- java webmethod_javax.xml.ws.WebServiceException:方法beaInvoke公开为WebMethod
- mac mysql 免密登录_Mac 免密登陆
- 【安利UI设计师】电商购物移动应用程序界面设计UI套件包,轻松完成项目需求。
- 海报中应用广泛的书法(手写)字体素材
- ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)