最後輕松一夏,周末利用python爬取“陳翔六點半”搞笑視頻!
覺得程序員再忙也需要給自己安排一點娛樂時間,對自己好點,自己對自己不好,誰會?
自己娛樂一般會有:跑步、看電影、小視頻,而小視頻是最家常的娛樂方式,看得最多的小視頻是「 陳翔六點半 」,咦!
拍得搞笑,演技也一流,也不乏有內涵!非常推薦大家看看。
時間太貴,我耗不起
正題
先上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爬取“陳翔六點半”搞笑視頻!