這篇文章給大家介紹如何用Python對b站的小視頻進(jìn)行爬取,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、個舊網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為個舊等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
我用 Python 對 b 站的小視頻進(jìn)行了爬取,因?yàn)槭切∫曨l,大小平均在 5 兆以內(nèi)。排隊(duì)時,沒網(wǎng)絡(luò)也能看小姐姐了,爽啊。文末給出了源碼獲取方式。
b 站小視頻地址:
http://vc.bilibili.com/p/eden/rank#/?tab=全部
我爬取了每日的小視頻排行榜,學(xué)會了每日的,爬取本周、本月的就非常簡單了,改個標(biāo)簽就行,稍后詳細(xì)分析會講到。以下是爬取結(jié)果。
語言:Python3
工具:Pycharm
主要由 3 部分組成:
get_json():提取目標(biāo)網(wǎng)頁的 json 數(shù)據(jù)信息。
downloader():下載小視頻并顯示下載進(jìn)度。
主函數(shù):循環(huán)下載視頻直到下載完畢。
打開網(wǎng)站往下滑動,視頻是動態(tài)加載的,打開調(diào)試工具,向下滑動加載視頻,查看 Headers 中 url ,url 中前面部分的鏈接是不變的,提取出來。(左右滑動查看全部代碼)
http://api.vc.bilibili.com/board/v1/ranking/top?
觀察下方參數(shù)的變化,發(fā)現(xiàn)只有 next_offset 這個字段在變,每次都比前一個多 10。
這就好辦了,我們把參數(shù)部分單獨(dú)拿出來,把可變的 next_offset 寫成變量,返回目標(biāo)網(wǎng)頁的 json 數(shù)據(jù)。
接下來,我把小視頻下載下來,為了美觀,我做了個下載器,顯示下載速度。效果如下。
此處有個地方需注意下,請求目標(biāo)網(wǎng)頁時必須帶上此網(wǎng)頁的 headers 信息,網(wǎng)站做了反爬操作,否則下載下來的視頻是空的,部分代碼如下。(ps:大家運(yùn)行代碼時把 headers 換成自己瀏覽器在本網(wǎng)頁的 headers 即可)
主函數(shù)中為了提取更多視頻,我們把 next_offset 這個變量做個循壞,然后從 json 數(shù)據(jù)中提取視頻的標(biāo)題和可下載的鏈接。觀察下頁面的 json 數(shù)據(jù)結(jié)構(gòu)就可以輕松獲取文章標(biāo)題和下載鏈接數(shù)據(jù)。
為了防止有些視頻沒有提供下載鏈接的情況,我加了異常處理,細(xì)心的朋友應(yīng)該發(fā)現(xiàn)了文章前面給的效果圖只有84個視頻,原因就在此。最后,為了防止 ip 被封,設(shè)置了隨機(jī)等待時間。其實(shí),總體下來,不到 5 分鐘,100 個視頻可以全部下載完畢。
關(guān)于如何用Python對b站的小視頻進(jìn)行爬取就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。