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

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

  

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

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线