技术选择以及思路
首先,获取实时弹幕有两种办法:
1. 正经渠道,去通过直播网站公开的开放平台去找对应的api,这种方案难度不高,但是获得授权的难度很高。
2. 就是想办法从网站上直接拿,毕竟网站么,都是把html传来传去,直接解析html肯定是可行的。
那既然是解析html又是用python那难道用requests神器? 结果我试了下发现不行,原因大概是requests发起的get请求在直播网站加载js访问弹幕服务器的时候就结束了,导致获取到的html根本没有弹幕。所以要找一种持久的家伙那就是自动测试神器selenium!这玩意儿的具体使用去搜搜教程上手还是很快的。但要学好css选择器才算上手,不然用的会比较痛苦。
分析
我们分析某直播网站的html
显然这个是一个在ul标签下一只往里面插入新增的弹幕,再分析li
<li id="d4bcdd57-8b1b-4755-a164-db23a71d763f" class="Barrage-listItem">
<div class="Barrage-notice--normalBarrage">
<span class="UserLevel UserLevel--9" title="用户等级:9">
</span>
<span class="RoomLevel RoomLevel--13" title="房间等级:13"></span>
<span class="Barrage-nickName Barrage-nickName--blue js-nick" title="放开那个女魔法师" data-uid="127456" style="">
放开那个女魔法师:
</span>
<span class="Barrage-content" data-chatid="9270e057e71544cd8dea1b0300000000">
经典4转1
</span>
</div>
</li>
从我截取下来的html就可以很明显的分析出来那个是哪个。想要啥就用css选择器拿啥。
当然我试验过用selenium自带的html选择器去获取内容的话性能貌似很差。所以我直接把html拿来自己分析。
danmu = driverChrome.find_element_by_id('js-barrage-list')
danmu_lis = danmu.find_elements_by_css_selector('li')
danmuHtml = str(danmu_lis[-1].get_attribute('innerHTML'))
python解析HTML当然是BeautifulSoup这个好东西了,利用BeautifulSoup(htmlString,‘lxml’)解析的话,性能还不错。