日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >關(guān)於奇酷 > 行業(yè)動(dòng)態(tài) > 實(shí)戰丨你永遠(yuǎn)不知道多少人在嗶哩嗶哩彈幕,但Python知道!

實(shí)戰丨你永遠(yuǎn)不知道多少人在嗶哩嗶哩彈幕,但Python知道!

來(lái)源:奇酷教育 發(fā)表於:

Python爬蟲(chóng)爬取Bilibili彈幕實(shí)戰。

  聚合了海量先鋒年輕人的B站,月均活躍用戶(hù)達(dá)到1.1億。
 
  提到B站,你會(huì)想到什麼?
 
  二次元?鬼畜?看番?diss?還是——彈幕?
 
  曾經(jīng)錯位時(shí)空不同的人,在同一個(gè)視頻下用彈幕進(jìn)行了交流。
 
  而發(fā)這條彈幕的人,可能甚至是五六年前發(fā)的。
 
  你永遠(yuǎn)不知道年輕人有多少梗,不知道有多少人在彈幕,但是——
 
  Python知道。
 
  Python爬蟲(chóng)爬取Bilibili彈幕
 
  這是Python爬蟲(chóng)爬取Bilibili彈幕實(shí)戰。
 
  有人說(shuō),B站因彈幕的體驗(yàn)感而一騎絕塵。
 
  飛逝的彈幕仿佛能溝通一切。
 
  那麼,B站上一個(gè)視頻的彈幕最多會(huì)有多少?
 
  2000條?還是更多?
 
  這麼多數(shù)據(jù),B站肯定是不會(huì)直接把彈幕和這個(gè)視頻綁在一起的。
 
  也就是說(shuō),有一個(gè)視頻地址為https://www.bilibili.com/video/av67946325,你如果直接去requests.get這個(gè)地址,裡面是不會(huì)有彈幕的,因為B站的彈幕是先加載當(dāng)前視頻的界面,然後再異步填充彈幕的。
 
  接下來(lái)我們可以打開(kāi)火狐瀏覽器(平常可以火狐谷歌控制臺(tái)都使用,因為谷歌裡面因為插件被攔截下來(lái)的包在火狐可以抓到,同理谷歌也是)的控制臺(tái)來(lái)觀(guān)察網(wǎng)絡(luò)請求了。
 
  經(jīng)過(guò)仔細(xì)排查之後,找到了一個(gè)請求xml的,它後面跟了一個(gè)oid,查看它的響應(yīng)內(nèi)容之後可以發(fā)現(xiàn)它就是彈幕文件。
  它的響應(yīng)時(shí)間98毫秒,遠(yuǎn)超其它幾個(gè)響應(yīng),所以說(shuō)如果把彈幕直接放在視頻頁(yè)面,用戶(hù)體驗(yàn)一定會(huì)很差。
  找到彈幕了,爬取它很容易,但是我們想要是爬取固定av號(hào)視頻的彈幕,而不是說(shuō)隨意去找一個(gè)oid來(lái)爬取彈幕,這樣我們都不知道爬下來(lái)的彈幕是哪個(gè)視頻的。
 
  接下來(lái)我們就可以複製oid的117784982值,去視頻頁(yè)面搜索看看了,通過(guò)視頻來(lái)獲得它的oid再來(lái)爬xml彈幕就很方便了。
 
  這次用了谷歌瀏覽器,在裡面通過(guò)搜索oid果然搜索到相關(guān)的數(shù)據(jù)了。
  其中cid是彈幕對(duì)應(yīng)的id,aid對(duì)應(yīng)視頻av號(hào)。
 
  先把這個(gè)頁(yè)面爬取下來(lái)。
 
 
  正則表達(dá)式最簡(jiǎn)單的使用方式其實(shí)就是直接match。拿到了內(nèi)容我們就要從中解析彈幕id了,對(duì)於這種規(guī)則紊亂的網(wǎng)頁(yè),我們就不能用上一篇中Bs4解析了,而是使用正則表達(dá)式。
 
 
  觀(guān)察這裡的內(nèi)容,我們大致的匹配規(guī)則就有了。
 
  cid={目標(biāo)}&aid=av號(hào)
 
  117784982就是我們的目標(biāo)。
 
  先根據(jù)av號(hào)拿到視頻頁(yè)面,然後解析視頻頁(yè)面拿到oid,最後用oid去請求xml彈幕文件。
 
  這樣我們就完成B站彈幕爬蟲(chóng)了。
 
  Python,好絕一鬼才!