來源: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 下
能夠向我這樣,選取本身須要的字段,而後用文件的形式把它輸出。皆大歡喜,拿到了地址了。
更多想要的功能能夠本身改代碼~