b站python弹幕签到_B站弹幕实时效果python

如题:如何实现B站直播弹幕呢?

分析过程:

进入B站官网--->随便点个直播房间--->F12抓包,刷新

分析每一条请求,点响应,找到弹幕信息。如图

9467542-87cd9693e40e6819.png

可以看出返回信息是json格式的,提交方法是POST,再分析一下提交参数

9467542-56c85c3cc1739848.png

还有两个参数是我怀疑是跟登陆有关系,不登陆不会提交这个两个数据,推测一下,我并没有登陆帐号,所以测试一下登陆帐号的结果。先记录一下没登陆系统给我生成的cookie

9467542-a3e4cec52fb3ef4a.png

登陆后看一下提交的数据:

9467542-7a91561ca66215cd.png

[图片上传中...(9467542-3aaadaa8b1760e6e.png-4d615d-1513748527154-0)]

再看一下cookie

9467542-3aaadaa8b1760e6e.png

果然,在这里。但是第三个参数是没有的。

所以构造字典提交数据的时候把这个值提交上。因为这个值只有在登陆的时候有。但是楼主测试过,不提交这个值也是可以获取数据的。

分析完成。

代码部分:

importrequests, time

url ='https://api.live.bilibili.com/ajax/msg'# POST请求,向这个网址提交数据

#构造POST提交参数

form = {'csrf_token':'',

'roomid':'3742025',

'token':''

}

#循环提交数据,达到实时获取弹幕信息效果,通过调试发现,太快只提交一次数据的话弹幕可能会重复,故,暂停一下。

#但是暂停一下提交,还是可能获取到重复的数据。故这里采用前后数据进行比较的方法防止弹幕重复,当然你也可以用多次比较。

while True:

html1 = requests.post(url,data=form)#开始提交数据

text1 =list(map(lambdaii: html1.json()['data']['room'][ii]['text'],range(10)))#获取数据,因为返回的数据是json格式,故可以用分层切片来取到弹幕那层,然后用map和lamda函数的用法取得弹幕信息,最后直接转换成list

time.sleep(5)#暂停5秒,再提交数据

html2 = requests.post(url,data=form)

text2 =list(map(lambdaii: html2.json()['data']['room'][ii]['text'],range(10)))

bilibili_txt = [itemforitemintext2ifitemnot intext1]#比较两个弹幕信息,列表推导弹幕信息

fordanmuinbilibili_txt:

print('直播间实时弹幕:',danmu)

你可能感兴趣的:(b站python弹幕签到)