愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

說明:

這解析方式是基於愛奇藝H5播放方式的。

準備工具:(私信小編007自動獲取大量Python學習資料)

1) Fiddler(抓包工具)

2) 谷歌瀏覽器

3) Notepad++(文本編輯工具)

4) Webstorm(JS調試工具)

5) Postman(HTTP請求工具)

6) UltraCompare(文本比較)

正文:

在使用谷歌瀏覽器之前,為了避免各種緩存的影響,務必先清除Cache,Cookie……

打開其中一個愛奇藝的視頻。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

使用fiddler 進行抓包,然後把對分析無用的圖像格式文件、css之類的過濾掉。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

等待視頻開始緩存,為了保證已經加載視頻,就等待廣告過完之後再進行分析數據。

……接下來就要開始分析需要的數據,當然首先要做的就是先再fiddler裡面找到捕獲的視頻資源,可以通過一下兩種方式找到所需視頻資源:

1)Body項,可以通過找數據長度比較長的項。

2)Content-Type項,文件流格式一般使用application/octet-stream類型。綜合以上方式會比較好。以下是抓包所得結果。(視頻開始播放後,就可以停止繼續抓包了,因為這東西挺佔後臺的。)

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

根據以上說的方法1找到下面的項

這是找到的一個看起來像是視頻的文件,所以你可以嘗試把響應的數據(Body)保存起來看看是不是你要的視頻文件。(當然這可能無法播放)

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

播放結果如下

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

顯然這不是所要的視頻資源。

所以你可以不斷嘗試,直到找到你想要的視頻緩存。……然後你就能找到以下這個項

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

可惜的是,這個文件卻是無法播放的,但這並不代表他不屬於這個視頻資源的。但是如果找不到這個,也沒問題的,你會找到下一片段的視頻資源。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

當我們知道圖片的下面一項的時候,你就很快能找到剩餘的片段了。

為什麼?因為你可以發現這兩個請求的URL路徑一樣,而且下面的哪一個片段是不完整的視頻,所以不可否認的是,愛奇藝把視頻片段分割成了很多片段。

什麼?你覺得牽強?對,確實是這樣的。但是不如這麼想,如果你覺得這不是可疑的視頻,那麼當你不能在Fiddler裡面找到除了這些片段的可疑播放的視頻的時候你就不會這麼想了,因為不管怎麼樣,你要相信fiddler已經把視頻捕獲到了。而且視頻肯定也是存在的,不然你怎麼能再頁面取觀看呢對吧。既然這樣,那麼我們就分析382這一項。要幹什麼呢?當然首先是看下這個地址。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

這恐怖的GET請求,一大堆符號。

GET /r/bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=8192-10431487HTTP/1.1

我們要做的就是構造這一串符號,並且是有依據的構造。從前面往後看,尋找最後一層目錄,得到服務器上的文件是這個

611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=8192-10431487

為了構造他,肯定是先找到這串字符最先出現的地方了。先忽略?號後面的參數,不如先找到611f0244cfe1a64d165b2f630be2e9fc(因為一眼看去他是最突出的)這是哪裡得到的吧。這就要用到fiddler強大的搜索工具了。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

我們要找的就是從前往後尋找最早出現這串字符的項。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

然後進一步尋找這一串字符出現在哪裡。(也就是在一下紅框裡面各自尋找這一串字符)

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

那麼既然這一串字符出現在這裡,那麼必然要先知道這一項的URL,並且構造他

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

GET/jp/dash?tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&class="lazy" data-original=01010031010000000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=1535880031201&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4a875&pt=0&d=0&s=&lid=&cf=&ct=&authKey=4c31a25989ea7e678b670125e6ee5acf&k_tag=1&ost=0&ppt=0&dfp=&locale=zh_cn&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D&pck=&k_err_retries=0&k_ft1=549755813888&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D&callback=Q838114a04d5d4d3adb265513f3244a36&ut=0&vf=a07fc56691bd8558b5e9f23e9119b36aHTTP/1.1

又是一長串字符了。整理參數如下tvid=1294428000

&bid=300
&vid=5e54f1fec36034f67521abf755dd3f93
&class="lazy" data-original=01010031010000000000
&vt=0
&rs=1
&uid=
&ori=pcw
&ps=0
&tm=1535880031201
&qd_v=1
&k_uid=836c674bfa7e7387a323d314bfb4a875
&pt=0
&d=0
&s=
&lid=
&cf=
&ct=
&authKey=4c31a25989ea7e678b670125e6ee5acf
&k_tag=1
&ost=0
&ppt=0
&dfp=
&locale=zh_cn
&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D
&pck=
&k_err_retries=0&k_ft1=549755813888
&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D
&callback=Q838114a04d5d4d3adb265513f3244a36
&ut=0
&vf=a07fc56691bd8558b5e9f23e9119b36a

看英文也可以大概的知道authKey 可能就是加密方式。所以你要在fiddler搜索authKey,(其實我這麼做是為了找到構造這個鏈接所對應的js

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

這是最早出現authKey的地方,為了方便分析,把他複製到notepad++裡面分析。

只找到一個結果。而且回頭看一下這些參數是不是很熟悉呢?大部分的參數他都已經給出來了。authKey:n(n("") + I + A),當然這裡面都是Js加密的結果,所以我們只要找到函數n和A和I的值就能構造出authKey了。當然我們不可能吧這個js代碼分析一遍,所以我們就要藉助谷歌瀏覽器的調試工具了。谷歌瀏覽器按F12彈出工具。並且在Sources找到這個js文件,並把他格式化左下角的{},(為了方便分析)

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

找到authKey,並給他做斷點。當然如果你能夠顧及的話,你可以同時分析多個參數。然後你要刷新頁面(可以直接按F5刷新),讓他停在斷點處。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

刷新後停在e處,你也可以直接讓指針觸碰函數n,然後你就能看到

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

你可以直接點進去看是哪一個函數,顯示是這個函數

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

看來這個n是調用了一串這些函數返回的結果。u(o(c(e),e.length * g))繼續往前面找函數c(),因為停留在這個,再瞭解作用域這些東西可以知道,這個函數c就是在這裡面,下圖

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

看來函數c是最底層了(也就是說沒有再往下調用的函數了(自定義))下面到函數o,再往前看就能找到函數o了。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

最後就是u了,在上上圖就能看到函數u了,所以,這個參數authKey就可以構造了,現在要做的就是要找到調用這些參數所傳遞的參數。,就是I和A

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

看參數名字tm大概可以知道這是一個時間戳,而且查看I也發現

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

,所以這很大概率就是時間戳。

而A就是參數tvid的值。我們先返回去fiddler看下這個tvid在前面的鏈接有沒有提到過。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

發現第一個鏈接就有這串數字

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

所以我們就可以從這個鏈接得到A了,這個鏈接就是愛奇藝視頻的請求地址。

下一步&k_uid=836c674bfa7e7387a323d314bfb4a875

在進行這一步之前不妨先看下這還缺什麼

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

通過對比發現就下面藍點那五個參數是上面沒有的。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

所以前面哪一些我就不講了(因為可以通過一樣的道理分析js就能得到參數的依據),接下來我要講的就是獲得以下五個參數。

首先是這個

k_ft1=549755813888

首先分析這個,要做的當然就是先找一下後面的那一串數字在fiddler在更前一點的鏈接裡面有沒有找到辣。

可惜的是沒有找到。。那麼我們只能去尋找他的參數名了“k_ft1”

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

事實上你不一定看到這些就馬上用谷歌瀏覽器的開發者工具取調試他,你可以在notepad++裡面看一下,找一下這個函數,比如這裡面這些函數都是沒有經過壓縮函數名,這樣可以直接取尋找這個函數,然後大概分析一下他的含義,也就是他是幹什麼的。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

所以這個參數解決掉了。

第二個參數:bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D

同樣的方法,先搜索參數值,但是注意的是這裡面的參數值是通過urlencode的,所以先解碼再尋找。

可以使用fiddler裡面的textwizard工具來解碼

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

發現並沒有這個,但是你可以搜索裡面的version或者dfp,為什麼呢?因為這很有可能是類似的js片段。

{‘version’:e.version,‘dfp’:e.dfp}

,我建議搜索dfp。但是說道理,我們也可以直接搜索參數名bop而不糾結與參數值。

然後有意思的是,我們想太多了,發現其實都在這裡。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

所以這就完了,事實上這裡面就有幾個函數了。

那麼剩下的callback vf可以通過

callback大家可以使用谷歌瀏覽器的開發者工具調試一下,看一下什麼時候獲得了callback。(圖忘了截,所以就當做是練習好了),

下面是vf

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

然後大家可以吧剛才那些參數整理一下就行了。這是一個漫長的工作,所以,我就不幫你們整理了。

到現在,我們已經構造出來了

GET/jp/dash?tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&class="lazy" data-original=01010031010000000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=1535880031201&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4a875&pt=0&d=0&s=&lid=&cf=&ct=&authKey=4c31a25989ea7e678b670125e6ee5acf&k_tag=1&ost=0&ppt=0&dfp=&locale=zh_cn&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D&pck=&k_err_retries=0&k_ft1=549755813888&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D&callback=Q838114a04d5d4d3adb265513f3244a36&ut=0&vf=a07fc56691bd8558b5e9f23e9119b36aHTTP/1.1 

這樣,我們就能得到一開始尋找的字符串:611f0244cfe1a64d165b2f630be2e9fc

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

而要知道的是,我們的目標就是下面這個鏈接,上面的鏈接只是為了尋找字符串 611f0244cfe1a64d165b2f630be2e9fc

GET /r/bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=0-8191HTTP/1.1 

通過簡單觀察發現,那個鏈接不僅得到了字符串611f0244cfe1a64d165b2f630be2e9fc,還得到了很多參數。不如比較一下看還缺什麼。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

通過對比發現還確實缺了不少。不如先從key開始找

key=0433de19d0c1b75057f6fc64c676e6ded

尋找0433de19d0c1b75057f6fc64c676e6ded,得到下面這一項

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

發現裡面的鏈接就是很完整的好不好。

https://bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0

所以我們要的就是要構造下面

GET /videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?qd_tvid=1294428000&qd_vipres=0&qd_index=1&qd_aid=220327201&qd_stert=0&qd_scc=ec9c19fe1c7863a46bd3245b238c2745&qd_sc=e1e1493d64de4db9c4d6c27f8220b24c&qd_p=7908d205&qd_k=a07fc56691bd8558b5e9f23e9119b36a&qd_class="lazy" data-original=01010031010000000000&qd_vipdyn=0&qd_uid=&qd_tm=1535880032356&qd_vip=0&cross-domain=1&qyid=836c674bfa7e7387a323d314bfb4a875&qypid=1294428000_02020031010000000000&qypid=1294428000_02020031010000000000&rn=1535880043829&pv=0.1&cross-domain=1HTTP/1.1 

分開參數

/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?
qd_tvid=1294428000

&qd_vipres=0
&qd_index=1
&qd_aid=220327201
&qd_stert=0
&qd_scc=ec9c19fe1c7863a46bd3245b238c2745
&qd_sc=e1e1493d64de4db9c4d6c27f8220b24c
&qd_p=7908d205
&qd_k=a07fc56691bd8558b5e9f23e9119b36a
&qd_class="lazy" data-original=01010031010000000000
&qd_vipdyn=0
&qd_uid=
&qd_tm=1535880032356
&qd_vip=0
&cross-domain=1
&qyid=836c674bfa7e7387a323d314bfb4a875
&qypid=1294428000_02020031010000000000
&qypid=1294428000_02020031010000000000
&rn=1535880043829
&pv=0.1
&cross-domain=1

這一次發現和之前的參數就就差不多了,比較一下

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

看來就剩下後面的幾個參數了。當然你也可以一個參數一個參數的找依據,但是有時候這是不必要的,你可以通過在不同的愛奇藝視頻網頁請求抓包,把一些不變的量你就當然是常量就行了。當然這也有弊端比如說這樣你就無法瞭解更深一層的含義。或者這些參數有可能就是破解vip限制的關鍵。(講道理這些參數是什麼意義我就沒研究,所以這個破解vip我是隨便說的,就是為了表達這樣一個意思,就是這些參數對僅僅解析這些視頻可能是無關重要的,但是如果你不僅僅只要這些,這些就很重要了)。

後面的幾個參數我不需要講,因為這個前面的一些參數值有重複。

比如&qyid=836c674bfa7e7387a323d314bfb4a875就是cookie的QC005。

所以後面就大概講一下如何驗證你構造出來的結果對不對。

搬出webstorm了,

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

這個軟件可以幫助你運行js腳本,這樣你就能運行上面的函數得到結果。然後你可以使用postman可以幫助你提交數據。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!

至於這些軟件如何使用我就不講了。

愛奇藝視頻H5解析分析過程,一篇來自頂級Python爬蟲師的筆記!


分享到:


相關文章: