使用爬蟲自動下載油管上我是歌手單曲視頻

本文介紹如何通過爬蟲的方法(使用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)

下載視頻

將每個視頻鏈接做一定處理後(前面加上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》完整視頻中,你最看好誰?

TAG:Python | 爬蟲 | 視頻 |