用python爬取B站弹幕并绘制词云
程序员文章站
2022-03-30 10:55:58
弹琵琶的小姐姐是我学python的动力啊啊啊...
最近在B站发现一个弹琵琶的小姐姐,真的是人美歌甜啊啊啊,所以打算爬取她的视频来分析弹幕同时制作词云。
查找相关信息之后发现,爬取B站弹幕的API接口有两个,分别是
https://api.bilibili.com/x/v1/dm/list.so?oid=cid
http://comment.bilibili.com/+cid+.xml
后面需要加上需要爬取的视频文件的cid。B站的每个视频都有自己独特的av号,bv号和cid。通过av号和bv号可以确定视频的地址,cid可以确定弹幕文件的地址。
任意打开一个弹幕文件,例如
http://comment.bilibili.com/197603144.xml
我们可以发现弹幕就在这个网页文件中。
- 获取B站视频的cid
打开B站,任意找一个视频,右键单击鼠标,点击“检查”。
打开视频,在右边的Network中找heartbeat文件,其中就有对应的cid(也有aid也就是av号和bvid也就是bv号)。
import imageio as imageio #加载图片
import requests #发出请求
import re #内置库 用于匹配正则表达式
import csv #文件格式
import jieba #中文分词
import wordcloud #绘制词云
cid=input('please input a cid:')
#url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+cid
url='http://comment.bilibili.com/'+cid+'.xml'
#获取完整的弹幕文件url
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
}
#请求头,模仿浏览器行为
response = requests.get(url,headers=headers)
# print(response.content.decode('utf-8'))
html_doc = response.content.decode('utf-8')
#把编码转化为utf_8编码
res = re.compile('<d.*?>(.*?)</d>')
#正则表达式匹配弹幕
danmu = re.findall(res,html_doc)
#写入csv文件
for i in danmu:
with open('b站弹幕.csv','a',newline='',encoding='utf-8-sig') as file:
writer = csv.writer(file)
danmu = []
danmu.append(i)
writer.writerow(danmu)
# 显示数据
f = open('b站弹幕.csv',encoding='utf-8')
txt = f.read()
print(txt)
f.close()
txt_list = jieba.lcut(txt) #精确分词
string = ' '.join((txt_list))
img='C:/Users/lenovo/Pictures/20200505101029364.png'
#本地图片
mk = imageio.imread(img)
#控制词云形状的重要参数
w = wordcloud.WordCloud(max_font_size=70,
background_color='white',
font_path='C:/Windows/SIMLI.TTF',
mask=mk,
scale=3)
w.generate(string) #生成词云的关键一步
w.to_file('pycloud.png')
到这里我们成功的找到B站的弹幕文件,同时按照词频生成了词云。关于更加详细的制作词云,也就是jieba库和wordcloud库的知识可以移步这篇文章https://blog.csdn.net/weixin_46530492/article/details/106832412
本文地址:https://blog.csdn.net/weixin_46530492/article/details/107190708
上一篇: 安卓第六课