使用爬蟲自動下載油管上我是歌手單曲視頻
本文介紹如何通過爬蟲的方法(使用urllib2和BeautifulSoup)獲取Youtube下整個playlist的視頻鏈接,並將這些視頻鏈接傳遞到youtube-dl工具,從而將playlist下面的視頻全部下載到本地。
源代碼在Ubuntu 16.04環境下測試通過 ,使用Spyder,Python版本為2.7
工具youtube-dl
雖然按名字來看是為油管量身定做的,但是實際上可以應用於很多其他視頻網站,親測優酷可用,甚至pornhub。。。(兄弟只能幫你到這了,你懂的)
Linux環境下可以通過pip直接安裝該工具:
sudo pip install youtube-dl
安裝完成後,可以直接通過在終端上輸入以下命令即可下載視頻, 其中URL為視頻的網址。
youtube-dl URL
當然也可以通過Python來調用該工具,從而實現視頻下載。
from __future__ import unicode_literalsimport youtube_dlydl_opts = {} with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download([URL])
該工具還有更多的使用方法,詳細可以參考:rg3/youtube-dl
爬取視頻鏈接
以下介紹如何通過爬蟲的方法獲取整個playlist下面的視頻鏈接,並將這些視頻鏈接傳遞到youtube-dl工具,從而將playlist下面的視頻全部下載到本地。
- 使用urllib2獲取到相應playlist的html
以我是歌手為例,湖南衛視為整個我是歌手單曲做了一個playlist,因此通過分析這個頁面的html可以獲取到每個單曲的鏈接地址。
按F12後發現所有視頻鏈接存在一些相同的規律:即都在名字為tr,class=「pl-video yt-ui下-tile」的Tag下,進一步分析每個視頻所對應的Tag,發現我們要找的視頻鏈接地址在名字為td,class=「pl-video-title」的子Tag a下,href 後即為視頻鏈接地址。
- 使用BeautifulSoup分析當前html,並找到所需鏈接
StartingSoup = BeautifulSoup(StartingHtml,"html.parser")# 找到所有視頻對應的鏈接地址SingleSongUrlTagList = StartingSoup.find_all(td,pl-video-title)
通過for循環對每一個查找到的結果做解析,進一步找到每個視頻所對應的URL
for SingleSongUrlTag in SingleSongUrlTagList: SingleSongUrl = SingleSongUrlTag.a.get(href)
下載視頻
將每個視頻鏈接做一定處理後(前面加上https://www.youtube.com),調用工具youtube-dl,將視頻下載到本地。通過try except語句過濾掉無效視頻鏈接地址(由於譚晶退賽,我是歌手官網把所有以前視頻設置為私人視頻,因此無法下載)。
try: SingleSongUrl = "http://www.youtube.com" + SingleSongUrl ydl_opts = {} with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download([SingleSongUrl])except Exception: pass
效果預覽
運行時可以在Console中看到下載速度,完成度和剩餘時間。
最終playlist下所有視頻下載到本地
祝大家好運!
推薦閱讀:
※嗶哩嗶哩有哪些好看的視頻?
※skyworth支持什麼格式的視頻?
※酒店培訓:打破傳統,注入新血——酒店培訓視頻
※王祖藍買買舞刷屏,魔性營銷你知道怎麼玩嗎?
※《wwe夏日狂潮2017》完整視頻中,你最看好誰?