下面我将为你详细讲解Python如何获取弹幕并保存到Excel中。这个过程大致可以分为两个步骤:
- 获取弹幕数据
弹幕从哪里来?我们可以通过访问一些弹幕网站,例如B站或Acfun网站,获取弹幕数据。这里我以B站为例,首先我们需要找到弹幕API的地址,这里我们可以使用Fiddler等抓包工具,来获取弹幕信息相关的请求地址和参数。这里我提供一个B站获取弹幕API的地址,供大家参考:
https://api.bilibili.com/x/v1/dm/list.so?oid=弹幕视频编号
其中oid
就是弹幕视频的编号,这个可以在B站网页版地址中获得。获取到地址后,我们就可以使用Python中的requests
库发起请求获取弹幕数据:
import requests
from bs4 import BeautifulSoup
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=弹幕视频编号'
response = requests.get(url)
soup = BeautifulSoup(response.content,features="lxml")
danmu_items = soup.find_all('d')
在这个代码块中,我们使用requests库请求了弹幕数据的网址,然后解析了返回的XML数据,其中所有的弹幕数据都在<d></d>
标签下,我们通过find_all
方法来获取所有弹幕数据。这个过程需要使用BeautifulSoup
库解析XML数据。
- 保存数据至Excel表格中
我们可以使用pandas
库将弹幕数据保存至Excel表格中。代码如下:
import pandas as pd
danmu_dict = {'danmu_text': [], 'danmu_time': []}
for item in danmu_items:
danmu_text = item.text
danmu_time = item['p'].split(',')[0]
danmu_dict['danmu_text'].append(danmu_text)
danmu_dict['danmu_time'].append(danmu_time)
df = pd.DataFrame(danmu_dict)
df.to_excel('danmu.xlsx', index=False)
在这个代码块中,我们首先会将弹幕数据整理成一个字典格式的数据,然后使用pandas.DataFrame
方法将数据转化为DataFrame格式。最后使用DataFrame.to_excel
方法将数据保存至Excel表格中。在这个例子中,我们只保存了弹幕文本和弹幕时间,其他的一些元数据没有进行保存。
示例说明一:
以上的代码是获取弹幕,提取其中的时间和文本内容,并以Excel的形式保存所有数据,将数据保存到本地。但是,如果你想要实时获取弹幕并将其保存到Excel表格中,或者想要对不同弹幕类型进行分类统计,这个过程还需要进一步改进。
示例说明二:
针对以上问题,我们可以考虑使用WebSocket协议来实现动态弹幕的获取。接下来的代码示例使用Websocket实时获取B站直播弹幕,对弹幕进行了简单的文本分类,输出不同类型弹幕的数量并保存至Excel表格中。
import websocket
import json
import pandas as pd
danmu_dict = {'time':[], 'type':[], 'content':[]}
def on_message(ws, message):
payload = json.loads(json.loads(message)[0]['data'])
if payload['cmd'] == 'DANMU_MSG':
time, dn_type, content = payload['info'][0], payload['info'][1][2], payload['info'][1][1]
danmu_dict['time'].append(time)
danmu_dict['type'].append(dn_type)
danmu_dict['content'].append(content)
print(f'{time}\t{dn_type}\t{content}')
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
ws.send('{"type": "loginreq","roomid": 直播房间号}')
ws.send('{"type": "joingroup","rid": 直播房间号, "gid": -9999)')
print('已经成功连接至Websocket服务器')
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://broadcastlv.chat.bilibili.com:2245/sub")
ws.on_open = on_open
ws.on_message = on_message
ws.on_error = on_error
ws.on_close = on_close
ws.run_forever()
df = pd.DataFrame(danmu_dict)
type_count = df.groupby('type').count()['content']
print(type_count)
df.to_excel('danmu.xlsx', index=False)
可以看到,以上代码使用了Websocket实时获取弹幕数据,并针对不同类型的文本弹幕信息进行了统计,并将获取到的数据保存至Excel表格中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python得到弹幕并保存到Excel中怎么设置 - Python技术站