python爬取b站弹幕并进行数据可视化

python爬取b站弹幕并进行数据可视化

1.第一步,爬取b站弹幕

我们随便打开一个b站视频
在这里插入图片描述

打开开发者模式,在network下搜索list,可以找到该视频的弹幕文件
在这里插入图片描述
打开之后是这个样子的
在这里插入图片描述
结构还是比较简单的,我们后续爬取数据也就比较方便
下面是爬取弹幕的代码

// An highlighted block
from bs4 import BeautifulSoup#负责解析网页源码
import requests#负责爬取网页源码
import re#对解析后的文件进行弹幕匹配

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
    }
response = requests.get("https://api.bilibili.com/x/v1/dm/list.so?oid=130684654", headers=headers)
html_doc = response.content.decode('utf-8')
format = re.compile("<d.*?>(.*?)</d>")
DanMu = format.findall(html_doc)
#逐个输出弹幕
for i in DanMu:
   print(i)

这是实现效果
在这里插入图片描述

2.第二步,对弹幕进行文件存储

这里我们需要导入新的库

// An highlighted block
import csv

对第一次的代码进行部分修改

// An highlighted block
for i in DanMu:
  with open(r'C:\Users\Administrator\Desktop\b站弹幕.csv',"a", newline='',encoding='utf-8-sig') as csvfile: 
    writer= csv.writer(csvfile)
    danmu = []
    danmu.append(i)
    writer.writerow(danmu)

以下是实现效果
在这里插入图片描述
这样我们就实现了弹幕的存储功能

3.将数据进行可视化

这里我们使用wordcloud库进行最简单的实现

// An highlighted block
import wordcloud
# 从外部.txt文件中读取大段文本,存入变量txt中
f = open('C:/Users/Administrator/Desktop/b站弹幕.csv',encoding='utf-8')
txt = f.read()

# 构建词云对象w,设置词云图片宽、高、字体、背景颜色等参数
w = wordcloud.WordCloud(width=1000,
                        height=700,
                        background_color='white',
                        font_path='msyh.ttc')

# 将txt变量传入w的generate()方法,给词云输入文字
w.generate(txt)

# 将词云图片导出到当前文件夹
w.to_file('C:/Users/Administrator/Desktop/output3.png')

以下是实现效果
在这里插入图片描述
当然你也可以对词云进行更加复杂的控制,例如指定形状,设置停词等,以下展示最终的成品代码

// An highlighted block
from bs4 import BeautifulSoup
import requests
import re
import csv
# 导入词云制作库wordcloud和中文分词库jieba
import jieba
import wordcloud
# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
mk = imageio.imread("C:/Users\Administrator\Desktop\code\chinamap.png")
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
    }
 
response = requests.get("https://api.bilibili.com/x/v1/dm/list.so?oid=130684654", headers=headers)
#print(response.text)
html_doc = response.content.decode('utf-8')
#soup = BeautifulSoup(html_doc,'lxml')
format = re.compile("<d.*?>(.*?)</d>")
DanMu = format.findall(html_doc)

for i in DanMu:
  with open(r'C:\Users\Administrator\Desktop\b站弹幕.csv',"a", newline='',encoding='utf-8-sig') as csvfile: 
    writer= csv.writer(csvfile)
    danmu = []
    danmu.append(i)
    writer.writerow(danmu)


# 构建并配置词云对象w,注意要加stopwords集合参数,将不想展示在词云中的词放在stopwords集合里,这里去掉“曹操”和“孔明”两个词
w = wordcloud.WordCloud(width=1000,
                        height=700,
                        background_color='white',
                        font_path='msyh.ttc',
                        mask=mk,
                        scale=15,
                        stopwords={' '},
                        contour_width=5,
                        contour_color='red')

# 对来自外部文件的文本进行中文分词,得到string
f = open('C:/Users/Administrator/Desktop/b站弹幕.csv',encoding='utf-8')
txt = f.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)

# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string)

# 将词云图片导出到当前文件夹
w.to_file('C:/Users/Administrator/Desktop/output2-threekingdoms.png')

以下是最终实现效果
在这里插入图片描述

  • 42
    点赞
  • 272
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
好的,以下是一个爬取 B 站视频弹幕发布时间并进行可视化的 Python 代码: ```python import datetime import matplotlib.pyplot as plt import bilibili_api from bilibili_api import video # 视频的 av 号 av_number = 123456 # 获取弹幕数据 danmaku_data = video.get_danmaku(av_number) # 提取弹幕发布时间 danmaku_time = [] for danmaku in danmaku_data: time_str = danmaku['time'] time_float = float(time_str) time_stamp = datetime.datetime.fromtimestamp(time_float) danmaku_time.append(time_stamp) # 统计弹幕数量和发布时间 danmaku_count = [] danmaku_time_dict = {} for time_stamp in danmaku_time: time_str = time_stamp.strftime('%Y-%m-%d %H:00:00') if time_str in danmaku_time_dict: danmaku_time_dict[time_str] += 1 else: danmaku_time_dict[time_str] = 1 for time_str in sorted(danmaku_time_dict.keys()): danmaku_count.append(danmaku_time_dict[time_str]) # 绘制可视化图表 plt.figure(figsize=(12, 6)) plt.plot(danmaku_time_dict.keys(), danmaku_count) plt.xlabel('发布时间') plt.ylabel('弹幕数量') plt.title('B 站视频弹幕发布时间分布') plt.xticks(rotation=45, ha='right') plt.show() ``` 这段代码会首先通过 `Bilibili-API` 库获取指定视频的弹幕数据,然后提取弹幕发布时间,并统计每个小时内的弹幕数量。最后使用 `matplotlib` 库绘制发布时间和弹幕数量的可视化图表。需要注意的是,这里的时间是按小时统计的,如果需要按其他时间粒度统计,可以修改代码中的 `strftime` 方法参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值