python获取B站弹幕数量并绘制折线图
#新人一枚,近期想分享一个关于B站弹幕数量在时间段内的统计,并绘制折线图。希望大家批评指正。
使用了B站提供的弹幕API。
以下为程序代码:
```python
import requests##响应网络
from bs4 import BeautifulSoup##分析网页页面
from pyecharts.charts import Line##绘制折线图
url = 'https://comment.bilibili.com/218710655.xml' ##B站api
fankui = requests.get(url)##因此为B站提供的API,所以无需更换headers.
fankui.encoding = fankui.apparent_encoding##此网页为xml,请求头获取到的网页编码与实际不同,使用编码转换使内容不乱码
neirong = fankui.text##使用.text属性获取内容
a = BeautifulSoup(neirong,'lxml')##使用BeatifulSoup解析网页内容
b = a.find_all(name='d')##通过find_all找到所有的d节点内容,找出的内容为列表形式
# print(b)
wordlist = []##创建一个空列表
for c in b:##遍历列表中的数据
shuju = c.attrs['p']##访问.attrs属性获取每个节点p的值
time = shuju.split(',')##使用.split传入逗号分隔shuju,获取字符串的第一项
wordlist.append(float(time))##先将时间转换为浮点数然后追加至空列表
wordDict = {}##创建一个空字典
for word in range(25):##word在0~24中
start = 30*word + 1##例如word为0则开始数值为30*0=1,若为1则开始数值为31
end = 30*(word + 1)##例如word为0则结束数值为30*(0+1)=30.
segment_range = f'{start}-{end}' ##字节范围使用了格式化输出。引用上面举例则为0-30为第一个区间范围
wordDict = 0##字典中键为segment_range的值设置为0
for shijian in wordDict.keys():##遍历字典中的key
start_key = shijian.split('-')##startkey为字典中的key使用剪切,以‘-’为界限,选取第一位。如:start_key=31-60则start_key为31
end_key = shijian.split('-')##end_key为字典中的key使用剪切,以‘-’为界限,选取第一位。如:start_key=31-60则start_key为60
# print(start_key)
# print(end_key)
for item in wordlist:##遍历wordlist赋值给item。现在wordlist中的数据根据上文可知为:[*.***,*.***]因为弹幕是在一个时间点发出的,我们要统计的是在一个时间段内发出的弹幕量
if int(start_key) <= item <= int(end_key):##如果item在整数start——key和end_key之间
wordDict = wordDict + 1##则在字典中将**-**+1
print(wordDict)##显示字典中的所有值
line = Line()##Line函数创建一个Line对象赋值给line
line.add_xaxis(list(wordDict.keys()))##先将字典中的key转换为列表值,然后使用.add_xaxis()函数设置折线图的X轴。
line.add_yaxis('弹幕数',list(wordDict.values()))##同上,将字典的值转换为列表,然后使用.add_yaxis()函数绘制折线图的Y轴,并且Y轴可以设置数据统称。
line.render('line.html')##render()函数可以默认折线图以html格式存储在代码所在文件夹内
print('success')##提示程序运行成功
```
绘制的折线图如下所示:
```
import requests##响应网络
from bs4 import BeautifulSoup##分析网页页面
from pyecharts.charts import Line##绘制折线图
url = 'https://comment.bilibili.com/218710655.xml' ##B站api
fankui = requests.get(url)##因此为B站提供的API,所以无需更换headers.
fankui.encoding = fankui.apparent_encoding##此网页为xml,请求头获取到的网页编码与实际不同,使用编码转换使内容不乱码
neirong = fankui.text##使用.text属性获取内容
a = BeautifulSoup(neirong,'lxml')##使用BeatifulSoup解析网页内容
b = a.find_all(name='d')##通过find_all找到所有的d节点内容,找出的内容为列表形式
# print(b)
wordlist = []##创建一个空列表
for c in b:##遍历列表中的数据
shuju = c.attrs['p']##访问.attrs属性获取每个节点p的值
time = shuju.split(',')##使用.split传入逗号分隔shuju,获取字符串的第一项
wordlist.append(float(time))##先将时间转换为浮点数然后追加至空列表
wordDict = {}##创建一个空字典
for word in range(25):##word在0~24中
start = 30*word + 1##例如word为0则开始数值为30*0=1,若为1则开始数值为31
end = 30*(word + 1)##例如word为0则结束数值为30*(0+1)=30.
segment_range = f'{start}-{end}' ##字节范围使用了格式化输出。引用上面举例则为0-30为第一个区间范围
wordDict = 0##字典中键为segment_range的值设置为0
for shijian in wordDict.keys():##遍历字典中的key
start_key = shijian.split('-')##startkey为字典中的key使用剪切,以‘-’为界限,选取第一位。如:start_key=31-60则start_key为31
end_key = shijian.split('-')##end_key为字典中的key使用剪切,以‘-’为界限,选取第一位。如:start_key=31-60则start_key为60
# print(start_key)
# print(end_key)
for item in wordlist:##遍历wordlist赋值给item。现在wordlist中的数据根据上文可知为:[*.***,*.***]因为弹幕是在一个时间点发出的,我们要统计的是在一个时间段内发出的弹幕量
if int(start_key) <= item <= int(end_key):##如果item在整数start——key和end_key之间
wordDict = wordDict + 1##则在字典中将**-**+1
print(wordDict)##显示字典中的所有值
line = Line()##Line函数创建一个Line对象赋值给line
line.add_xaxis(list(wordDict.keys()))##先将字典中的key转换为列表值,然后使用.add_xaxis()函数设置折线图的X轴。
line.add_yaxis('弹幕数',list(wordDict.values()))##同上,将字典的值转换为列表,然后使用.add_yaxis()函数绘制折线图的Y轴,并且Y轴可以设置数据统称。
line.render('line.html')##render()函数可以默认折线图以html格式存储在代码所在文件夹内
print('success')##提示程序运行成功
``` iawyxkdn8 发表于 2022-8-22 12:41
这东西有什么用?
如果你是UP主的话,可以查看大家再哪个时间段发的弹幕多。就能间接看出大家对那一块儿更感兴趣或其他情况。以此复盘自己的创作内容。 可以继续分析弹幕的内容啥的 这东西有什么用? zibingo 发表于 2022-8-22 12:36
可以继续分析弹幕的内容啥的
可以,可以提取内容生成词云图等,我可以再发一个帖。 快乐的鸡蛋黄 发表于 2022-8-22 13:07
```
import requests##响应网络
from bs4 import BeautifulSoup##分析网页页面
格式化了一下,论坛内md要在md编辑器编辑才行 可以的。了解了 本帖最后由 shiyanwei 于 2022-8-22 13:33 编辑
快乐的鸡蛋黄 发表于 2022-8-22 13:07
```
import requests##响应网络
from bs4 import BeautifulSoup##分析网页页面
谢谢,我第一次在52pojie发帖,选了MD不知道最后为什么没显示出来。下次注意一下吧。 shiyanwei 发表于 2022-8-22 13:32
谢谢,我第一次在52pojie发帖,选了MD不知道最后为什么没显示出来。下次注意一下吧。
选md后要在弹出的框里粘贴代码
页:
[1]
2