最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲(chóng)爬取Bilibili彈幕過(guò)程解析

 更新時(shí)間:2019年10月10日 10:25:16   作者:一個(gè)剛剛大四的弱渣  
這篇文章主要介紹了Python爬蟲(chóng)爬取Bilibili彈幕過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

先來(lái)思考一個(gè)問(wèn)題,B站一個(gè)視頻的彈幕最多會(huì)有多少?

比較多的會(huì)有2000條吧,這么多數(shù)據(jù),B站肯定是不會(huì)直接把彈幕和這個(gè)視頻綁在一起的。

也就是說(shuō),有一個(gè)視頻地址為https://www.bilibili.com/video/av67946325,你如果直接去requests.get這個(gè)地址,里面是不會(huì)有彈幕的,回想第一篇說(shuō)到的攜程異步加載數(shù)據(jù)的方式,B站的彈幕也一定是先加載當(dāng)前視頻的界面,然后再異步填充彈幕的。

接下來(lái)我們就可以打開(kāi)火狐瀏覽器(平??梢曰鸷雀杩刂婆_(tái)都使用,因?yàn)楣雀枥锩嬉驗(yàn)椴寮粩r截下來(lái)的包在火狐可以抓到,同理谷歌也是)的控制臺(tái)來(lái)觀察網(wǎng)絡(luò)請(qǐng)求了。

經(jīng)過(guò)仔細(xì)排查之后,我找到了一個(gè)請(qǐng)求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)我們就可以復(fù)制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)。

# encoding: utf-8

import requests

headers = {
  'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
  'Accept': 'text/html',
  'Cookie': "_uuid=1DBA4F96-2E63-8488-DC25-B8623EFF40E773841infoc; buvid3=FE0D3174-E871-4A3E-877C-A4ED86E20523155831infoc; LIVE_BUVID=AUTO8515670521735348; sid=l765gx48; DedeUserID=33717177; DedeUserID__ckMd5=be4de02fd64f0e56; SESSDATA=cf65a5e0%2C1569644183%2Cc4de7381; bili_jct=1e8cdbb5755b4ecd0346761a121650f5; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(umY))|ukl~0J'ulY~uJm)kJ; UM_distinctid=16ce0e51cf0abc-02da63c2df0b4b-5373e62-1fa400-16ce0e51cf18d8; stardustpgcv=0606; im_notify_type_33717177=0; finger=b3372c5f; CURRENT_QUALITY=112; bp_t_offset_33717177=300203628285382610"

}
resp = requests.get('https://www.bilibili.com/video/av67946325',headers=headers)
print(resp.text)

拿到了內(nèi)容我們就要從中解析彈幕id了,對(duì)于這種規(guī)則紊亂的網(wǎng)頁(yè),我們就不能用上一篇中Bs4解析了,而是使用正則表達(dá)式。

正則表達(dá)式最簡(jiǎn)單的使用方式其實(shí)就是直接match。

re.search(匹配規(guī)則,文本).group()

觀察這里的內(nèi)容,我們大致的匹配規(guī)則就有了。

cid={目標(biāo)}&aid=av號(hào)

117784982就是我們的目標(biāo)。

av_id = '67946325'
resp = requests.get('https://www.bilibili.com/video/av'+av_id,headers=headers)
match_rule = r'cid=(.*?)&aid'
oid = re.search(match_rule,resp.text).group().replace('cid=','').replace('&aid','')
print('oid='+oid)

先根據(jù)av號(hào)拿到視頻頁(yè)面,然后解析視頻頁(yè)面拿到oid,最后用oid去請(qǐng)求xml彈幕文件。

xml_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+oid
resp = requests.get(xml_url,headers=headers)
print(resp)

這樣我們就完成B站彈幕爬蟲(chóng)了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

龙山县| 奉节县| 诸城市| 盐边县| 玛沁县| 岳阳市| 通榆县| 梅河口市| 沙雅县| 建水县| 宜昌市| 肇东市| 汕头市| 宽城| 呈贡县| 延庆县| 花莲县| 株洲市| 安溪县| 政和县| 五常市| 榆社县| 沁水县| 昌都县| 余江县| 自贡市| 高密市| 江津市| 和政县| 新巴尔虎左旗| 阿巴嘎旗| 安乡县| 浪卡子县| 会东县| 长岛县| 碌曲县| 松潘县| 乌拉特前旗| 若尔盖县| 平顶山市| 华池县|