1. 程式人生 > >最後輕松一夏,周末利用python爬取“陳翔六點半”搞笑視頻!

最後輕松一夏,周末利用python爬取“陳翔六點半”搞笑視頻!

多看 獲取數據 也會 程序員 copy 是什麽 查看 ima 周末

覺得程序員再忙也需要給自己安排一點娛樂時間,對自己好點,自己對自己不好,誰會?

自己娛樂一般會有:跑步、看電影、小視頻,而小視頻是最家常的娛樂方式,看得最多的小視頻是「 陳翔六點半 」,咦!技術分享圖片

技術分享圖片

拍得搞笑,演技也一流,也不乏有內涵!非常推薦大家看看。

時間太貴,我耗不起

正題

先上Python爬取小視頻的效果圖,duang、duang、duang、想下載什麽就是什麽,哈哈。

技術分享圖片

打開瀏覽器(電腦版,方便調試)輸入微博 url 點擊輸入框,輸入「陳翔六點半」,回車搜索

技術分享圖片

技術分享圖片

但是發現在這個頁面就只用幾個視頻。滑下一點,一看,有個「更多熱門微博」,點擊!

技術分享圖片

跳轉到新頁面,一看,一滑,就像一個無底洞!一直滑都會有視頻!

咦,這不就是我要的視頻數據嘛

技術分享圖片

仔細看地址,不知大家有沒仔細看地址欄,我滑動時,地址是一直不變的,也就證明這網頁是用 Ajax 來異步請求加載數據的!

我就馬上按 F12 調出調試工具,點擊 Network 選項卡,選中 XHR ,一邊滑動網頁,一邊查看 Ajax 網絡請求,選中一條查看

技術分享圖片

展開 Json 數據查看,可以看到每條視頻微博數據,總供有十條

技術分享圖片

我想下載視頻,如何快速找到視頻的下載地址而不是每一個數據點開來看呢?我想想能不能借助了谷歌瀏覽器的忙。

隨便點開其中一個視頻,右鍵,竟然可以查看並復制視頻鏈接

技術分享圖片

復制到視頻鏈接後,貼到地址欄,回車訪問,也能播放,大喜呀!

馬上回到調試工具,點擊 preview 預覽數據,按 Ctrl + F 進行搜索,把剛剛復制的地址貼到搜索框

技術分享圖片

咦,竟然匹配到了!

發現 media_info 中的 stream_url 就是該視頻的播放地址,也就是下載地址。再往前看,media_info 前面的 content2 是視頻的在微博中的標題。

查看其他的 Json 數據也同樣有視頻地址和標題,復制裏面的 視頻地址 url 貼到瀏覽器地址欄也能直接播放視頻!八九不離十,這個 stream_url 就是視頻下載地址了

技術分享圖片

馬上構造請求,根據剛剛復制的視頻地址獲取資源,並下載視頻,看看有沒有什麽端倪,此時心中忐忑不安

技術分享圖片

技術分享圖片

很快就下載好了

技術分享圖片

點擊播放視頻,竟然毫無毛病,流暢播放!這下好了!就 kuang、kuang、kuang 準備開始擼代碼了,不要慫,就是幹!

認真查看請求地址、請求頭中的請求地址,請求方法和 User—Agent 等,開始構建請求方法模擬 Ajax 請求,獲取 Json 數據。

技術分享圖片

技術分享圖片

技術分享圖片

查看多幾次異步請求,就會發現,變化的參數只有 page,可以一步步把一個參數刪掉後測試一下能不能正常獲取數據,這樣把一些非不要的參數剔除。裏面有一些註釋,是我踩過的坑

技術分享圖片

,有興趣就多看幾眼

技術分享圖片

,希望各位看客能分享一下(在下方留言)在 python 爬蟲上入過的一些坑,讓彼此少躺槍!

獲取到了頁面後,構建方法解析 Json 數據,分析 Json 數據中的層級結構,把裏面的視頻名和視頻下載地址提取出來。

技術分享圖片

這裏有個快捷查出 stream_url 層級結構路徑,選中該屬性或者說節點,右鍵,copy property path

技術分享圖片

再粘貼到瀏覽器地址欄查看即可清晰知道它們之間的層級結構

技術分享圖片

技術分享圖片

面對這種多層 json 格式數據,我知道有上面兩種取值方式,代碼中也說明了各的優勢和缺點,按需選取。如果你還有更優雅的方式,希望你能在下方留言

技術分享圖片

提取到視頻的標題和下載地址後,簡單改一下前面的下載方法,來適應一下

技術分享圖片

之後在,主函數中循環、遍歷調用前面的方法,就下載指定到多少頁的視頻了

技術分享圖片

嗨皮時刻,效果如下

技術分享圖片

上面的代碼中還有許多需要優化之處,比如下載時重名怎麽辦、各種參數的有效性判斷等等,後面我也會優化一下,把它優化成:只用要用戶輸入自己喜歡的小視頻制作方,如「 陳翔六點半」,再指定想看多少個視頻或者多少頁,後就自動下載視頻,下載好了,就可以嗨皮娛樂一波了。關鍵是自己省很多時間,不得不像那些優秀的算法和大數據屈服!

技術分享圖片

最後輕松一夏,周末利用python爬取“陳翔六點半”搞笑視頻!