1. 程式人生 > >爬取網易雲音樂個人動態中的視訊(Ⅰ): 分析

爬取網易雲音樂個人動態中的視訊(Ⅰ): 分析

前言

在某天下午, 我愉快的刷著雲村哈哈, 很歡樂, 無意看到我所關注的一位 音樂人 說要下架他(她)所創作的所有電臺, 我想著會不會以後動態裡的視訊也要刪除呢? 剛好很久沒有寫過爬蟲的程式碼了, 於是就有了這樣的事兒. 

簡單分析

因為是要將視訊爬取下來, 而且粗略估計一個視訊的時長大概5分鐘不到, 網易雲應該不會對視訊進行分段, 所以最終的目標就是獲取視訊的連結.

按照一些爬蟲教程所說, 思路大概可以這麼概括: 觀察網頁的元素, 獲取視訊關鍵的id等資訊, 分析網路請求(get或post一些什麼資訊), 對返回的資訊進行一些儲存的操作. 然而, 網易雲音樂的網站基本是用<iframe>這個標籤構建的, 簡單的爬蟲對其並不友好, 那麼我們用selenium+phantomjs來解決這個問題就好了.

個人動態頁面 為例, 通過對其的分析, 可以看出html標籤中的自定義屬性data-vid存放了視訊的id, 如下圖


在新的頁面開啟 視訊, 可以看到位址列的地址應為

http://music.163.com/#/video?id=5B0AF067CBB42F7789F7B97E13827565

通過播放視訊, 分析網路請求, 可以看出這個視訊是通過網易雲自己的api來獲取


這個playurl?crsf_token= 看起來和我需要的東西有關係, 仔細瞧一瞧, 可以發現Request URL為 http://music.163.com/weapi/cloudvideo/playurl?csrf_token=

再來看看引數什麼的


從上圖的紅框和Request URL可以推測這個是網易雲的api

再來看看Response


上圖的紅框中的url就是視訊的url, 而且還是超清(shd).

小結

最終思路是這樣的:

  1. 用selenium+phantomjs在個人動態頁面上獲取所有的視訊id(data-vid)
  2. 使用api去獲取視訊連結
  3. 儲存連結等