you-get 一个很强的视频地址抓取工具

来源:https://github.com/soimort/you-get git

出自于 Mort Yao 大神之手:http://www.geekgrade.com/geeksheet/soimort/blogsgithub

前言(废话):json

  前段时间,我因公司需求。因此要去研究如何拿到视屏的播放地址。通常普通的网站的视屏播放地址仍是很好拿到的。可是对于优酷,腾讯这样的大型视屏资源站就很难拿到视屏资源了。普通的网站你经过网页就能够直接抓取到视屏的播放地址。可是这些大型就不行,这些网站都是作了防盗链的。就拿优酷来说,首先他用了本身的SWF播放器,而后服务器会异步加载一段参数到页面播放器上去。播放器内部会对这些参数进行一个解析,而后获取到视频的播放地址。这个解析过程是比较复杂的。服务器

  最开始我用fiddler4去抓包,仍是可以抓到不少有用信息的。最开始想用逆向JS去作,可是后来发现它的东西好像和JS关系不太大,而后我又用jsop去抓关键代码,发现,他的视屏信息是经过异步加载的,表示jsoup抓不到,后来仔细观察发现,他的请求一本都是SWF播放器发出来的,没办法,只能把他的SWF抓下来,作了一个反编译后:(若是只是简单的网页套用的话,能够用它的swf而后去抓网页上name="flashvars" 段的value,而后把这段value发给swf后就能播放了。)异步

  这边就是主要的东西。ide

大概知道优酷的大概加密方式就是工具

  k.youku.com/player/getFlvPath+"/sid/"+$sid+"_"+No+"/st/"+thisVideoType+"/fileid/"+id网站

  大概就是这个格式 sid 就是securityId 而后加上No(编号)而后后面的 fileId也是通过一系列加密的,并非简单的ID。通常是会有一个token  ,K ,ep 参数是比较重要的参数 最后拿这个地址你只是获取到了一串可以获取播放地址的JSONthis

[{"fileid":"0300080100579F87DDDF300157E54E465E9572-D357-57B7-15CA-646DEC5748A9.mp4","server":"http://117.41.231.17/youku/696AF5871C487D59853F424D/0300080100579F87DDDF300157E54E465E9572-D357-57B7-15CA-646DEC5748A9.mp4"}]

  就如上面这个同样,虽然server可以获取到视频的地址,可是/youku/后面的那串乱码是一个SEED加密。也就是说没多少个小时就会变一次,也就是不可能一次拿到一个永远不变的地址的。加密

  优酷的视频下载全是走的客户端,也就是说网页端想要抓取地址,普通的方法是行不通的。后来我对客户端进行一个数据抓包,而后惊奇的发现TMD根本抓不到任何有用信息,只能无奈的感叹这客户端太尼玛屌了。每次我点击下载新视频后再看看抓包信息,空空如也像什么也没发生过。没办反只能走反编译的路了。。(反编译工具免费版只能看,,不能复制更别说调试了。。、。。我操。。。)

      扯了这么多,如今进入正题了。you-get 是一个强大的抓取视频的工具,原理就是上面的swf反编译后抓取了加密方式,而后对网页请求进行一个解析,而后从视屏站服务器中骗取地址出来。

     首先这个语言是基于Python 的 先去官方下载最新的(至少3.0以上)的版本,由于这个版本自带pip3.下好后配好环境

     这边我就很少说了:http://www.jianshu.com/p/a3f8df948395

     而后打开cmd命令 输入 

pip3 install --upgrade you-get

     来获取 you-get 获取成功后基本的使用方法上面连接有。

     接下来就是关键了。

     若是你是只想获取地址的话能够在前面 加  命令

--json

  

you-get --json  youwannaURL

  便可获取到地址

经过pip3安装的东西通常放在 你的Python文件夹/Lib/site-packages/  下

  extractor.py 是main 层后的 功能能层。 能够进去看看 有不少方法 ,好比

 

you-get  URL这种不带参数的话 就会执行这个download 的第一个if 的else语句 直接下载视频。若是有了 --json 参数的话,就是执行的这个if

 下载的功能在 common.py里面

能够向我这样加一段来输出看。或者用return阻断下载,。

回到输出json这边来在json_output.py 下

能够向我这样,选取本身须要的字段,而后用文件的形式把它输出。皆大欢喜,拿到了地址了。

更多想要的功能能够本身改代码~

相关文章
相关标签/搜索