Bilibili视频爬虫
一直想爬取BiliBili的視頻,無奈一直沒有去研究一下。
最近,在旭哥的指點之下,用了Fiddler抓包,抓到了一直期待的視頻包,完成了下載。
下面寫一下我做這個爬蟲的過程。
相關(guān)依賴? :Fiddler+Python3 + Requests
下面看一下我做這個爬蟲的具體步驟:
1. 進(jìn)入某個具體視頻的頁面抓取視頻包測試。
進(jìn)入這個頁面:https://www.bilibili.com/video/av26019104,如下圖所示。點擊播放按鈕。
可以看到Fiddler已經(jīng)抓到了很多包。別著急,現(xiàn)在還沒有視頻包出現(xiàn)。由于需要時間下載,所以具體視頻包會過一會才能彈出來。
?
過大概一兩分鐘,就會看到這個包,如下圖??梢郧宄目吹竭@個是Flv形式的視頻流的包,看這個包的大小也可以看出來,是相當(dāng)?shù)拇蟆?/p>
下面分析一下這個包的具體參數(shù)。點擊上圖紅色圈圈那個“Raw",會彈出下面這個窗口
可以看到是一個Get請求,請求的url和Headers都很清楚。
這時候就可以實驗一下,來寫一小段代碼測試一下是否可以通過requests.get()方法來下載視頻。
?
#######################################################################
????import requests
????with open("D:\video\bilibili.mp4") as f:
? ? ? ?????f.write(requests.get(url, headers = headers, verify = False).content)? ? ? ?#這里的Verify=False是跳過證書認(rèn)證
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? # 沒有證書認(rèn)證會warning,但不影響
????print("下載完成")? ? ? ? ? ? # 這里只是寫了核心部分,headers和url沒有寫,直接copy過來就好了,
????????????????????????????????????????? ?#?注意Url前面要加Host.? ?真正的請求地址是http://主機Host地址/upgcx.......
############################################################################
?
可以看到如果你運行這段代碼,已經(jīng)可以把視頻下載到了本地。
這里你可以多試幾個視頻,可能會發(fā)現(xiàn),有些視頻按照抓包得到的Headers,請求之后只能Get到一部分視頻,比如視頻8M,你Get到只有2M。你去看一下Headers就會發(fā)現(xiàn),他多了一個Range參數(shù)。把這個刪除掉,就可以下載了。
經(jīng)過我的實驗,所有視頻請求的Headers格式都可以統(tǒng)一為下圖這樣。里面有2個參數(shù)哈。
1.host,主機名,就是從你爬出來的URL中正則出來的host
2. 視頻標(biāo)號。
?
2. 獲取請求Headers參數(shù)和請求源URL:
要找URL,可以看一下URL中的內(nèi)容,里面的hfa=xxxxxxxx和hfb=xxxxxxx應(yīng)該是加密的?這可怎么辦。這時候用Fiddler,從抓來的包里搜索一下這兩個參數(shù),肯定藏在某個包里。用CTRL + F 輸入hfa 搜索。可以看到包含HFA關(guān)鍵字的包都被找出來了。
進(jìn)去一看,其實包含在網(wǎng)頁源代碼的包,也就是說URL中的參數(shù)包含在網(wǎng)頁源代碼里。
回到最初的那個視頻頁面,看一下網(wǎng)頁源代碼。搜索一下URL。
驚喜的發(fā)現(xiàn),其實整個URL都在網(wǎng)頁源碼里。這豈不是太簡單了。
不過需要注意的是,這個URL中含有的hfa等加密部分是會動態(tài)變化的。所以在最終腳本的代碼結(jié)構(gòu)中,需要拿一個URL,及時用來做get請求。下載完成之后再拿下一個URL。
我之前就犯過這樣的錯,由于URL過期,導(dǎo)致部分視頻下載不到。
?
3. 從UP主的主頁爬取所有視頻的信息(視頻編號,標(biāo)題)。
在之前的實驗之上,現(xiàn)在只要有視頻編號,我們就可以下載到對應(yīng)的視頻了。所以接下來要做的工作就是從Up主的主頁來獲取所有的視頻信息。
訪問某個Up主的主頁
點擊圈圈的更多,可以進(jìn)入所有視頻的頁面。
這時候看Filddler抓包的結(jié)果,看到這個json包,里面包含了本頁所有視頻的信息。
同樣,看一下包頭。如下圖
也做一下實驗,可以發(fā)現(xiàn)Cookie是不必須的參數(shù)。
同之前下載視頻的Get方法,同樣可以Get到這個Json包。然后就可以把內(nèi)容通過Json解析的語句拿出來。
????????? ? 這里我并沒有做翻頁的工作,而是直接請求了100個視頻。想做翻頁的同學(xué),加一點代碼就好了。
?
4. 全部的整合起來:
具體腳本點擊下面鏈接去下載。只需要更改Up主的Mid編號即可下載不同的Up主的作品。
都很簡單。如果這些東西你還看不懂,那可能是你對基本的爬蟲還不夠理解。
有問題歡迎留言,我會及時回答。
這里下載腳本
?
請尊重原創(chuàng)!!!!!!!!
如果你要轉(zhuǎn)載,請以醒目的標(biāo)識著名源地址。
你也不想自己用心做的東西被剽竊。
總結(jié)
以上是生活随笔為你收集整理的Bilibili视频爬虫的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抓取Bilibili哔哩哔哩网站视频(J
- 下一篇: xp无法搜索计算机,xp系统的笔记本电脑