中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲爬取Bilibili彈幕過程解析

發布時間:2020-10-06 21:01:34 來源:腳本之家 閱讀:265 作者:一個剛剛大四的弱渣 欄目:開發技術

先來思考一個問題,B站一個視頻的彈幕最多會有多少?

比較多的會有2000條吧,這么多數據,B站肯定是不會直接把彈幕和這個視頻綁在一起的。

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

接下來我們就可以打開火狐瀏覽器(平常可以火狐谷歌控制臺都使用,因為谷歌里面因為插件被攔截下來的包在火狐可以抓到,同理谷歌也是)的控制臺來觀察網絡請求了。

經過仔細排查之后,我找到了一個請求xml的,它后面跟了一個oid,查看它的響應內容之后可以發現它就是彈幕文件。

Python爬蟲爬取Bilibili彈幕過程解析

它的響應時間98毫秒,遠超其它幾個響應,所以說如果把彈幕直接放在視頻頁面,用戶體驗一定會很差。

Python爬蟲爬取Bilibili彈幕過程解析

找到彈幕了,爬取它很容易,但是我們想要是爬取固定av號視頻的彈幕,而不是說隨意去找一個oid來爬取彈幕,這樣我們都不知道爬下來的彈幕是哪個視頻的。

接下來我們就可以復制oid的117784982值,去視頻頁面搜索看看了,通過視頻來獲得它的oid再來爬xml彈幕就很方便了。

這次用了谷歌瀏覽器,在里面通過搜索oid果然搜索到相關的數據了。

Python爬蟲爬取Bilibili彈幕過程解析

其中cid是彈幕對應的id,aid對應視頻av號。

先把這個頁面爬取下來。

# 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)

拿到了內容我們就要從中解析彈幕id了,對于這種規則紊亂的網頁,我們就不能用上一篇中Bs4解析了,而是使用正則表達式。

正則表達式最簡單的使用方式其實就是直接match。

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

Python爬蟲爬取Bilibili彈幕過程解析

觀察這里的內容,我們大致的匹配規則就有了。

cid={目標}&aid=av號

117784982就是我們的目標。

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)

先根據av號拿到視頻頁面,然后解析視頻頁面拿到oid,最后用oid去請求xml彈幕文件。

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

這樣我們就完成B站彈幕爬蟲了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

侯马市| 大悟县| 辉南县| 开江县| 多伦县| 华阴市| 恩施市| 德惠市| 红河县| 阳泉市| 惠水县| 辽宁省| 绩溪县| 龙门县| 象州县| 龙川县| 神农架林区| 襄城县| 抚远县| 军事| 噶尔县| 民勤县| 太白县| 丹江口市| 白城市| 肥西县| 清河县| 石门县| 滨海县| 渝北区| 鄂尔多斯市| 施甸县| 丹阳市| 萍乡市| 曲水县| 九龙城区| 苏尼特右旗| 江北区| 潼南县| 榕江县| 彰化县|