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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,983评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,351评论 11 349
  • ■关注“原味平江”,了解平江山水人文■ 1.莫举家出行 2.莫暴饮暴食 3.看好老人小孩 4.谨慎饮...
    天河水响阅读 582评论 2 5
  • 你带着夏日的所有余热 悄然而来 兴尽不归 起床,剪指甲,画画,喂鱼,叫外卖 所有的事情必将没有关联 自行车锁无心再...
    fangpeii阅读 600评论 0 0