日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~

發(fā)布時間:2024/9/19 python 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標題:閑著沒事,嘗試一下用Python爬取B站彈幕呀~

前言

最近同學要做東西,需要用 B 站的視頻對應(yīng)的彈幕數(shù)據(jù)做分析,于是請我?guī)兔ε廊?B 站視頻的彈幕數(shù)據(jù)。

對于爬蟲而言,我們需要找到對應(yīng)數(shù)據(jù)所在的接口,找到接口,就可以找到對應(yīng)的數(shù)據(jù)。這個時候我們只需要簡單的調(diào)用 Python 庫進行爬取,輸出到文件即可。

目前針對 B 站彈幕爬取有兩種方法:

方法一:找到接口數(shù)據(jù),編碼爬取

方法二:找到 BV號,調(diào)用API

這篇博客分別對兩種方法進行了整合介紹,并給出了詳細的操作流程。

尋找彈幕數(shù)據(jù)

其實 B 站是提供了彈幕接口的,B站把視頻對應(yīng)的彈幕數(shù)據(jù)全部放在 xml 文件中,獲取的接口是

1、https: //comment.bilibili.com/視頻的cid.xml2、https: //api.bilibili.com/x/v1/dm/list.so?oid=視頻的cid

兩個接口目前都是可以正常使用的,第一個接口是老版本,第二個接口是新版本。

這里我們使用老版本接口,以視頻“刺客伍六七”為例子來演示,獲取視頻對應(yīng)的 cid,使用的是谷歌瀏覽器。

第一步,到 B站打開對應(yīng)視頻,比如“刺客伍六七”,進入視頻播放頁面(先不要點擊播放)。

第二步,按 F12 鍵,打開瀏覽器的控制臺,轉(zhuǎn)到 NetWork 部分。

第三步,點擊播放,注意觀察 NetWork 下面加載的文件,當看到名為 heartbeat 的 xhr 文件時,點擊暫停。

heartbeat 的里面記錄了該視頻的一些特有信息,比如 aid、cid、BVid 等等。一個的視頻特有信息都是固定的,比如一個視頻只有一個 cid。

第四步,點擊任意一個 heartbeat 文件,在 Headers 標簽頁中往下翻,就可以找到 cid 了。

第五步,將 cid 與對應(yīng)的接口進行拼接,輸入在瀏覽器的地址欄進行查看。

這一步是為了熟悉對應(yīng)彈幕數(shù)據(jù)的網(wǎng)頁結(jié)構(gòu),方便之后的編碼工作進行數(shù)據(jù)的提取。如果使用熟練的話則可以跳過此步。

編寫爬蟲

既然我們已經(jīng)可以找到了彈幕數(shù)據(jù)所在的的地方,直接進行爬取即可。大致可以分為以下幾步:

獲取整個頁面

提取彈幕數(shù)據(jù)

簡單的數(shù)據(jù)預(yù)處理

輸出到文件

爬蟲編寫完成后,每次我們只需要修改文件名和 cid 就可以繼續(xù)爬取彈幕數(shù)據(jù)保存到文件中了。

importrequestsfrombs4 importBeautifulSoupimportpandas aspdimportre

# 彈幕保存文件file_name = '刺客伍六七第一集.csv'

# 獲取頁面cid = 47506569url = "https://comment.bilibili.com/"+ str(cid) + ".xml"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}request = requests.get(url=url, headers=headers)request.encoding = 'utf-8'

# 提取彈幕soup = BeautifulSoup(request.text, 'lxml')results = soup.find_all( 'd')

# 數(shù)據(jù)處理data = [data.text fordata inresults]# 正則去掉多余的空格和換行fori indata:i = re.sub( 's+', '', i)

# 查看數(shù)量print( "彈幕數(shù)量為:{}".format(len(data)))

# 輸出到文件df = pd.DataFrame(data)df.to_csv(file_name, index= False, header= None, encoding= "utf_8_sig")print( "寫入文件成功")

代碼說明:

B站目前還沒有針對爬蟲設(shè)置特別的反爬措施,因此可以直接爬取

彈幕數(shù)據(jù)絕大部分都是中文,一定要使用 utf-8 編碼

xml 文件中彈幕數(shù)據(jù)都在 d 標簽內(nèi),使用 BeautifulSoup 來提取所有的 d 標簽,再獲取標簽內(nèi)的數(shù)據(jù)

彈幕數(shù)據(jù)可能會有多余的空格和換行,使用正則表達式進行處理

使用 Dataframe 將數(shù)據(jù)輸出到 csv 文件中。參數(shù) index=False 不將索引序列保存到文本、header=None 不保存列名

爬蟲寫入文件的結(jié)果如下圖:

B站彈幕數(shù)量

這里不得不提一下 B 站的彈幕數(shù)量規(guī)則:

B站的彈幕池是有上限的,彈幕的具體數(shù)量和視頻的長度有所聯(lián)系。一般來講,一部十分鐘內(nèi)的視頻彈幕數(shù)量上限為 1000,一部25分鐘的視頻為 3000,40分鐘左右的為 6000,時間更長的話會破萬。

如果大家發(fā)的彈幕數(shù)量太多了,超過彈幕池的數(shù)量上限怎么辦?

B 站的做法是按照時間順序用將以前的彈幕剔除掉,然后放入新的彈幕,這樣就將該視頻的彈幕數(shù)量始終維持在一個等級上,而且用戶看到的還是最新的彈幕。

比如這里,“刺客伍六七”第一集的時長是16分半,彈幕數(shù)量 3000。

新技術(shù)介紹

今年,也就是 2020 年,B站某位大佬在 github 上分享了自己的開源項目,也就是 bilibili 的 API 調(diào)用庫。

GitHub 地址為:https://github.com/Passkou/bilibili_api

通過這個 API 調(diào)用模塊,可以實現(xiàn)獲取視頻的評論、彈幕、播放量等信息,還可以實現(xiàn)投幣、點贊、發(fā)送彈幕等一系列的用戶功能。

比起我們上面所介紹的方式,用這個 API 來獲取視頻的彈幕就更為簡單了。我們只需要傳入視頻的 BVid,調(diào)用彈幕 API 即可獲取該視頻的彈幕(Bvid 的獲取和 cid 同理)。

在使用這個 API 之前,我們需要先用 pip 把這個庫安裝上

pipinstall bilibili_api

可以看到,調(diào)用 API 簡直不要太方便。而且 API 還有人維護和更新,拿來即可用。

frombilibili_api importvideoimportreimportpandas aspd

# BVid、fileNameBVid = "BV1oW41157Na"file_name = '刺客伍六七第一集.csv'

# 獲取彈幕my_video = video.VideoInfo(bvid=BVid)danmu = my_video.get_danmaku

# 數(shù)據(jù)處理data = [data.text fordata indanmu]fori indata:i = re.sub( 's+', '', i)

# 查看數(shù)量print( "彈幕數(shù)量為:{}".format(len(data)))

# 輸出到文件df = pd.DataFrame(data)df.to_csv(file_name, index= False, header= None, encoding= "utf_8_sig")print( "寫入文件成功")

責任編輯:

總結(jié)

以上是生活随笔為你收集整理的python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。