抓騰訊視頻真實地址總結
阿新 • • 發佈:2017-07-05
技能 base_url 分析 標識 pic llb url dtc d3d
抓騰訊視頻裸源總結 騰訊視頻必然是國內最全面,最復雜的視頻網站之一了,因此研究他的網頁結構很有代表性. 首先,騰訊理所當然不會把視頻資源暴露在網頁源代碼裏,所以F12查看他的元素以獲得重要信息你會無功而返. 所以,淒涼地研究一段時間後斷然放棄... 有一個流傳已久的經驗, 大概是: 攻克一個網頁,最好從移動端入手,至於為什麽, 大概因為移動端源代碼要稍簡單一點, 或者說一些加密算法還不成熟. 所以,get一個小技能, 以為只有我知道, 搜尋了半天居然發現是多數瀏覽器都支持了n久的... 只是以前是設置參數,現在的瀏覽器都很智能,一鍵就可以模擬手機,並且可以選型號 進入正文: 模擬手機瀏覽器進入視頻首頁, 任意選擇一個視頻進入, F12後重新刷新一遍 騰訊不出意料地采取異步加載技術,所以,等n多讓人大開眼界的廣告加載完畢後,你會看到正片襲來 為了防止不斷地動態加載造成打擾,可以等正片加載完畢後停止抓包錄制 安心的分析每條代碼吧, 有的是圖片,有的是css, 特別要留意的是js 要相信在眾多的元素裏面, 終究可以找到視頻播放地址 http://124.14.20.19/vlive.qqvideo.tc.qq.com/z0024zqdzu1.p212.1.mp4?sdtfrom=v1010& guid=21b1d1487c0e3886a2958dc5f2503b9a&vkey=9644BCB6D0138F9831260BE00AA16EE17DEAAA416155124AA999873279C305 574FB8F0311CA565E95D5CB127925E29683E8813DB6373B64D37F5EBD59EF971B6F32CBE001F0B39B585827D9AC07484FDFD3B1255A95A 550DB69002BF46B20594E6BF36DC67A4F3302ADABA6120CD137D3DA2A049DFD5DDC8&platform=2 有一些參數是不必要的,可以考慮去掉,這裏采用嘗試的方法,因為的確不懂這些簡稱什麽意思,閱讀起來太殘忍了 簡化後視頻地址 http://124.14.20.19/vlive.qqvideo.tc.qq.com/z0024zqdzu1.p212.1.mp4? vkey=9644BCB6D0138F9831260BE00AA16EE17DEAAA416155124AA999873279C305574FB8F0311CA565E95D5CB127925E29683E8813D B6373B64D37F5EBD59EF971B6F32CBE001F0B39B585827D9AC07484FDFD3B1255A95A550DB69002BF46B20594E6BF3 6DC67A4F3302ADABA6120CD137D3DA2A049DFD5DDC8 以上可以看到,視頻主要參數由 協議http:// + 類似ip + host + vid一樣的東西(z0024zqdzu1) + 長串的vkey 組成 需要費心的是vid 和vkey , 主要是vkey,因為其他都能從源代碼輕松找到或者拼接 所以找vkey是重點, 不用說,vkey肯定是播放視頻的某個關鍵"鑰匙" 需要的vkey在哪裏?怎樣構造這個奇怪的url? 經過總結發現,構造目標地址方法有三種, 1: 根據規律構造.如頁數,每頁的個數,其實數 2: 來自某一個文件的一個組成元素, 在第一個文件裏找到第二個文件需要的元素,常見於id,cid,vid 等 3: 手動生成, 常見的有時間戳:time.time() 在這個案例中, 方法二比較靠譜.所以,這個vkey就在其他文件中尋尋覓覓吧! 終於,在一個叫getinfo裏面發現了可疑文件,他的返回是一長串貌似我們認識的東西 getinfo的完整請求地址 https://vv.video.qq.com/getinfo?callback=txplayerJsonpCallBack_getinfo_552345&&charge=0&vid=z0024zqdzu1&defaultfmt=auto &otype=json&guid=21b1d1487c0e3886a2958dc5f2503b9a&platform=10201&defnpayver=0&appVer=3.2.26&sdtfrom=v1010&host=v.qq.com &ehost=https%3A%2F%2Fv.qq.com%2F&sphttps=1&_rnd=1499231532&spwm=2&defn=&fhdswitch=0&show1080p=0&isHLS=0 &newplatform=10201&defsrc=1&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D&_1499231532114= 返回的是一個類json文件,去掉頭就是完全的json, 用json解析工具得到如下: { "dltype": 1, "exem": 0, "fl": { "cnt": 3, "fi": [ { "id": 10203, "name": "sd", "lmt": 0, "sb": 1, "cname": "標清;(270P)", "br": 64, "drm": 0, "video": 1, "fs": 4972275, "sl": 0 }, { "id": 10212, "name": "hd", "lmt": 0, "sb": 1, "cname": "高清;(480P)", "br": 235, "drm": 0, "video": 1, "fs": 16526691, "sl": 1 }, { "id": 10201, "name": "shd", "lmt": 0, "sb": 1, "cname": "超清;(720P)", "br": 650, "drm": 0, "video": 1, "fs": 31367763, "sl": 0 } ] }, "fp2p": 0, "hs": 0, "ip": "211.161.248.25", "ls": 0, "preview": 139, "s": "o", "sfl": { "cnt": 0 }, "tm": 1499248445, "vl": { "cnt": 1, "vi": [ { "br": 115, "ch": 0, "cl": { "fc": 1, "ci": [ { "idx": 1, "cs": 16526691, "cd": "139.690", "cmd5": "2fa46e4979bef73aeee198b119bcddb5", "keyid": "z0024zqdzu1.10212.1" } ] }, "ct": 21600, "drm": 0, "dsb": 0, "fclip": 1, "fmd5": "2fa46e4979bef73aeee198b119bcddb5", "fn": "z0024zqdzu1.p212.mp4", "fs": 16526691, "fst": 5, "fvkey": "771B9BCC38551D087A458F669156E0C8C3E83BE0A8EB9A62C9065A87D1C0A913F43A40BA502ED5BD575A6F66FE66A93E07E2BEAAA48D6997EB610B96AD2436F4AA64134E59CDB1205BF931F801785AA288EFE31242619D391F3F169950BAF5AA0901DA9E8E3B7D81A811FD5348EE8A3FE6046D8C8BE5400A", "head": 0, "hevc": 0, "iflag": 0, "level": 0, "lnk": "z0024zqdzu1", "logo": 1, "mst": 8, "pl": [ { "cnt": 3, "pd": [ { "cd": 2, "h": 45, "w": 80, "r": 10, "c": 10, "fmt": 40001, "fn": "q1", "url": "https://puui.qpic.cn/video_caps/0/" }, { "cd": 2, "h": 90, "w": 160, "r": 5, "c": 5, "fmt": 40002, "fn": "q2", "url": "https://puui.qpic.cn/video_caps/0/" }, { "cd": 2, "h": 135, "w": 240, "r": 5, "c": 5, "fmt": 40003, "fn": "q3", "url": "https://puui.qpic.cn/video_caps/0/" } ] } ], "share": 1, "sp": 0, "st": 2, "tail": 0, "td": "139.69", "ti": "《雙世寵妃》邢昭林梁潔組坦誠夫婦上演獨寵蜜愛", "type": 1036, "ul": { "ui": [ { "url": "http://124.14.20.19/vlive.qqvideo.tc.qq.com/", "vt": 203, "dtc": 0, "dt": 2 }, { "url": "http://124.14.20.21/vlive.qqvideo.tc.qq.com/", "vt": 203, "dtc": 0, "dt": 2 }, { "url": "http://124.14.20.20/vlive.qqvideo.tc.qq.com/", "vt": 203, "dtc": 0, "dt": 2 }, { "url": "http://video.dispatch.tc.qq.com/35137871/", "vt": 0, "dtc": 0, "dt": 2 } ] }, "vh": 480, "vid": "z0024zqdzu1", "videotype": 2, "vr": 0, "vst": 2, "vw": 848, "wh": 1.7666667, "wl": { "wi": [ ] } } ] } # } 什麽標清,高清之類,所幸可以看懂一些了. 而,我們還看到了fvkey, fvkey和vkey一定有著某些不可告人的關系! 並且, 在vl的vi裏面的ul裏的ui裏面有url地址,這url有類ip的東西,所以因電腦而異,需要取出來作為播放頁的base_url 所以,getinfo要堅決構造出來,並且得到fvkey, url, 不罷休 那麽問題來了,getinfo的url實在超級長,大概有三十多個參數,哪些是需要的呢? 經過苦逼地百次嘗試,得出以下結論: &_1499231532114= 時間戳, 可以去掉,不影響 &_qv_rmt2=o6Qa4YDm149352oVg%3D 比較重點,這是騰訊最近的新技術,對網絡起瘋狂限速作用,去掉後視頻延遲3-5秒出畫面,雖加載成功,但是出現明顯卡頓 &_qv_rmt=jBZ5pIl8A19213wFt%3D 同上 &defsrc=1 可以去掉,不影響 &newplatform=10201 可以去掉,不影響 &isHLS=0 可以去掉 &show1080p=0 1080p按鈕,可以去掉 &fhdswitch=0 全高清切換按鈕,可以去掉 &defn= 有人說是清晰度,defn是definition的簡寫;sd、hd、shd、fhd分別是standard definition、high definition、super high definition、full high difinition的簡寫。然而,可以去掉 &spwm=2 可以去掉 &_rnd=1499231532 可以去掉 &sphttps=1可以去掉 &ehost=https%3A%2F%2Fv.qq.com%2F 可以去掉 &host=v.qq.com 可以去掉 &sdtfrom=v1010 不能去掉, 延遲加載,播放失敗 &appVer=3.2.26 app版本信息,作為後綴便於發送統計的,可以去掉 &defnpayver=0 可以去掉 &platform=10201 平臺信息,不能去掉,會導致404 &guid=21b1d1487c0e3886a2958dc5f2503b9a 全球唯一標識符,不建議去掉,畫面20s左右開始卡頓 &otype=json 腳本類型,建議保留,便於作json解析,去掉後會展示成xml類型數據 &defaultfmt=auto 像是某個默認按鈕,默認為自動,去掉後沒有影響, 可以去掉 &vid=z0024zqdzu1 視頻唯一標識,顯然不能去 &charge=0 應該是付費相關,可以去掉 callback=txplayerJsonpCallBack_getinfo_552345 有待觀察,暫時去掉沒影響 剩余的base_url: https://vv.video.qq.com/getinfo? 以上是經過了反復對比嘗試,挨個增刪驗證的, 其實有多次爬取經驗就會得知一些為0的參數或者默認的參數是可以主動刪掉的 本次逐一進行了增刪嘗試,主要是擔心某些參數盡管去掉後不影響最終加載出來,但是可能會導致延遲或者卡頓,這非常影響用戶體驗 經過梳理,最終獲得流暢視頻的fvkey和url需要: base_url + vid + otype + guid + platform + sdtfrom + _qv_rmt 重新組裝一遍精簡的url: https://vv.video.qq.com/getinfo?vid=z0024zqdzu1&otype=json&guid=21b1d1487c0e3886a2958dc5f2503b9a&platform=10201&sdtfrom=v1010&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D 那麽,這些參數從哪裏來?解析一下: https://vv.video.qq.com/getinfo?可以作為默認base_url vid可以從視頻頁面或者源代碼中提取 otype為固定的json格式 guid 暫時發現一臺機子是固定的,也是限速,可能未必,是微軟在作怪 platform固定的 sdtfrom固定的 _qv_rmt 限速技術,難搞, 到處找不到,每次都不一樣,先用固定一個試試, 這是該爬蟲成敗的關鍵,因為我們認為,抓到一個雖然可以播放但是有瑕疵的視頻,即是失敗 最後組成了一個可以獲取fvkey並且能夠比較輕松組裝的url, {}便於代碼用format方法 https://vv.video.qq.com/getinfo?vid={vid}&otype={otype}&guid={guid}&platform={platform}&sdtfrom={sdtfrom}&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D 所以,小黑板畫重點了: 首先從播放頁得到視頻vid,代碼省去這一環節,因為vid很好找 組成getinfo頁面,得到fvkey 組成視頻真實地址 好吧,實際上也不是什麽重點, 因為每個抓取視頻網站的爬蟲都會經歷這些階段,那麽不同在哪裏呢? 1:觀看了不少爬視頻的帖子發現人們常說的getkey(即獲取fveky的腳本)在現在的騰訊視頻版本沒有了,再次證明反爬技術日新月異,爬蟲不進步很難生存了 2:騰訊視頻極有可能在今年上線了新的限制技術, 即前面所說的_qv_rmt, 這個參數由特殊算法生成,每次請求都不一樣,每臺機子也不一樣 猜測可能用了guid和時間戳等數據用一種算法合成,而且成對出現,去掉它的結果就是導致視頻加載速度瞬間變成20k左右每秒,幾乎一秒一卡,無法觀看 如果不去掉它,如何生成呢? 不幸找遍了所有文件,沒有找到答案, 所以暫時一成不變了,但是這肯定不是最終解決方案. 所以,有了勉強的源碼示例, 但是用一成不變的_qv_rmt值一定時間內沒有出問題, 這是一個謎 # 勉強源碼示例 import requests import re import json # vid就直接查找得到,正則影響效率太多 vid = input(‘請輸入視頻vid:‘) # vid = ‘n1656e0z8xj‘ # 默認的參數 json_type=‘json‘ platform = ‘11001‘ guid=‘21b1d1487c0e3886a2958dc5f2503b9a‘ sdtfrom = ‘v1010‘ # getinfo的base_url base_info_url = ‘https://vv.video.qq.com/getinfo?vid={vid}&otype={otype}&guid={guid}&platform={platform}&sdtfrom={sdtfrom}&_qv_rmt=jBZ5pIl8A19213wFt%3D&_qv_rmt2=o6Qa4YDm149352oVg%3D‘ # 真實地址的base_url base_real_url = ‘{self_host}/{vid}.mp4?vkey={fvkey}‘ # format方法生成getinfo info_url = base_info_url.format(vid=vid, otype=json_type, guid=guid, platform=platform, sdtfrom=sdtfrom) response = requests.get(info_url) html = response.text # 正則表達式提取json數據並序列化為json格式 data = re.search(‘=(.*);‘,html).group(1) data = json.loads(data) for each in data.get(‘vl‘).get(‘vi‘): fvkey = each.get(‘fvkey‘) self_host = each.get(‘ul‘).get(‘ui‘)[0].get(‘url‘) # 組裝視頻真實地址 real_url = base_real_url.format(self_host=self_host, vid=vid, fvkey=fvkey) print(‘視頻真實地址為:‘,real_url) 最後,所有的爬蟲技術都是針對當前頁面的結構進行的,對於一些變化速率很高的網站,比如騰訊視頻,抓到的地址很容易失效 這是因為生成key的算法十分復雜, 猜想有guid,時間戳,_qv_rmt等每時每刻都在變化的數據參與計算,目標只有一個:一般人休想永久的搞到地址 這是許多工程師晝夜在研究算法和加密技術的原因. 同時,針對頁面的分析,還僅局限於‘所見即所得‘的狀態,爬蟲不會無中生有,雖然抓到的地址是裸源無廣告,但是很依賴網頁的動態加載技術和登陸限制, 也就是說,vip的視頻比如只試看5分鐘,在不登錄前提下,源碼中只放出了5分鐘,剩余的部分無從找到, 所以對於另一種黑科技的研究--‘破解vip‘,僅從爬蟲技術來看,還來日方長.
抓騰訊視頻真實地址總結