抓取网页视频工具(如何拿到优酷来讲的播放地址?|大神)
优采云 发布时间: 2021-10-20 16:07抓取网页视频工具(如何拿到优酷来讲的播放地址?|大神)
出自Mort Yao之手:
前言(废话):
前段时间,因公司需要。所以我们要研究如何获取视频画面的播放地址。一般普通网站的视频播放地址还是很容易拿到的。但对于优酷、腾讯这样的大型视频资源站来说,获取视频资源却是困难重重。普通网站可以直接通过网页抓取视频画面的播放地址。但是这些大的都不好。这些网站都是反水蛭。以优酷为例。首先他使用自己的SWF播放器,然后服务器异步加载一个参数给页面播放器。播放器内部解析这些参数,然后获取视频的播放地址。这个分析过程比较复杂。
一开始我用fiddler4抓包,能抓到很多有用的信息。一开始想用反向JS来做,后来发现好像和JS关系不大,后来用jsop抓关键代码,发现他的视频信息是异步加载的,说明jsoup抓不到。经过仔细观察,他发现他所有的请求都是SWF播放器发送的。没有别的办法,只能抓取他的SWF并反编译:(如果只是一个简单的web应用程序,可以使用它的swf然后抓取网页上name="flashvars"部分的值,然后将此值发送到swf,它可以播放。)
这是主要的事情。
我大概知道优酷的加密方式是
/player/getFlvPath+"/sid/"+$sid+"_"+No+"/st/"+thisVideoType+"/fileid/"+id
大概格式sid是securityId,然后是No(数字)和后面的fileId也是用一系列加密的,不是简单的ID。一般都会有token,K,ep参数是比较重要的参数。最后,有了这个地址,你只需要得到一串可以获取播放地址的JSON。
[{"fileid":"0300080100579F87DDDF300157E54E465E9572-D357-57B7-15CA-646DEC5748A9.mp4","server":"http://117.41.231.17/youku/696AF5871C487D59853F424D/0300080100579F87DDDF300157E54E465E9572-D357-57B7-15CA-646DEC5748A9.mp4"}]
就像上面一样,虽然服务器可以获取视频地址,但是/youku/后面的一串乱码是SEED加密。换句话说,它每隔几个小时就会改变一次,即不可能一次得到一个永远不会改变的地址。
优酷的视频下载都是手机客户端,也就是说网页要抓取地址,普通的方法是不行的。后来我在客户端进行了一次数据抓取,惊讶的发现TMD根本抓取不到任何有用的信息。每次点击下载新视频再看抓包信息,好像什么都没发生。如果没有反编译,唯一的办法就是反编译。. (免费版的反编译工具只能查看,不能复制,更别说调试了……)
说了这么多,现在该进入正题了。You-get 是一款功能强大的视频捕捉工具。原理是将上面的swf反编译捕获加密方式,然后解析网页请求,然后从视频站服务器获取地址。
首先,这种语言是基于 Python 的。先去官方下载最新版本(至少3.0),因为这个版本自带pip3.,然后配置环境。
这里我就不多说了:
然后打开cmd命令输入
pip3 install --upgrade you-get
为了get you-get,get成功后的基本使用方法见上面链接。
下一步是关键。
如果只是想获取地址,可以在前面加一条命令
--json
you-get --json youwannaURL
你可以得到地址
通过pip3安装的东西一般放在你的Python文件夹/Lib/site-packages/
extractor.py 是主层之后的功能层。进去看看的方式有很多种,比如
不带参数的you-get URL会执行下载的第一个if的else语句直接下载视频。如果有--json参数,则执行此if
下载的函数在common.py
你可以加一段给我输出。或者使用 return 来阻止下载。
回到输出json端,在json_output.py下
你可以对我这样做,选择你需要的字段,然后以文件的形式输出。大家都很高兴,得到了地址。
你可以更改代码以获得更多你想要的功能~