抓取网页视频工具(如何拿到优酷来讲的播放地址?|大神)

优采云 发布时间: 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下

  

  你可以对我这样做,选择你需要的字段,然后以文件的形式输出。大家都很高兴,得到了地址。

  你可以更改代码以获得更多你想要的功能~

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线