python实现虎牙直播弹幕

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

分析过程:

进入虎牙官网—>随便点个直播房间—>F12抓包,刷新

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

《python实现虎牙直播弹幕》 image.png

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

《python实现虎牙直播弹幕》 image.png

分析完成。

代码部分:

import requests
import time
import random
url = 'http://www.huya.com/cache1min.php?m=chatMessage&tid=22808102&sid=2536653492'  # get请求,向这个网址提交数据
#构造get提交参数
form = {'m':'chatMessage',
'tid':'22808102',
'sid':'2536653492',
        }
header = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0'}

#循环提交数据,达到实时获取弹幕信息效果,通过调试发现,太快只提交一次数据的话弹幕可能会重复,故,暂停一下。
#但是暂停一下提交,还是可能获取到重复的数据。故这里采用前后数据进行比较的方法防止弹幕重复,当然你也可以用多次比较。
while True:
    html1 = requests.get(url,headers =header,params=form)#开始提交数据
    text1 = list(map(lambda ii: html1.json()['result']['chats'][ii]['chat'], range(20)))#获取数据,因为返回的数据是json格式,故可以用分层切片来取到弹幕那层,然后用map和lamda函数的用法取得弹幕信息,最后直接转换成list
    #print(text1)
    time.sleep(random.uniform(2,3))  #暂停3秒,再提交数据
    html2 = requests.get(url, headers= header,params=form)
    text2 = list(map(lambda ii: html2.json()['result']['chats'][ii]['chat'], range(20)))
    #print(text2)
    huyadanmu_txt = [item for item in text2 if item not in text1]#比较两个弹幕信息,列表推导弹幕信息
    for danmu in huyadanmu_txt:
         time.sleep(random.uniform(1,2))
         print('虎牙直播间实时弹幕:',danmu)
    原文作者:北冥神君
    原文地址: https://www.jianshu.com/p/e1400f6ae1d2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞