国外网页视频抓取工具(如何拿到优酷来讲的播放地址?|大神)
优采云 发布时间: 2022-01-06 11:03国外网页视频抓取工具(如何拿到优酷来讲的播放地址?|大神)
出自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(number),后面的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
获取成功后的基本使用方法见上面链接。
下一步是关键。
如果只是想获取地址,可以在前面加一条命令
--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下
你可以对我这样做,选择你需要的字段,然后以文件的形式输出。大家都很开心,拿到了地址。
你可以更改代码以获得更多你想要的功能~