由于自己学艺不精,后续词云的简略代码没怎么看懂,梳理了一遍把整个的学习内容记录下来。主要参考的为bilibili_api的教程和词云的生成教程(https://blog.csdn.net/itanders/article/details/88858415)
自己的环境:python3.7;pycharm编译器
一、bilibili_api获取弹幕
这部分代码如下:
#爬取bilibili弹幕
from bilibili_api import Verify
from bilibili_api.video import VideoInfo
from bilibili_api.video import Danmaku
verify = Verify(sessdata="自己的sessdata",csrf="bili_jct")
video_info = VideoInfo(bvid="BV1JE411g7XF",verify=verify)
f = open(r'D:\学习\LMY_pythonlearn\bilibili.txt','a')
danmu = video_info.get_danmaku()
for i in danmu:
f.write(i.text)
f.close()
1234567891011
首先要给verify指定的登录信息:sessdata和csrf,在b站登录帐号后,chrome获取sessdata途径如下:
点击地址栏的小锁头
打开coockie
打开bilibili的cookie 找到sessdata,复制即可。
csrf我没找到,直接用的文章里给的值:bili_jct
最后将爬取的弹幕存到txt文档里面:
弹幕获取完成。
二、绘制词云
利用了jieba进行分词,然后用wordcloud绘制词云,matplot可视化。代码如下:
import jieba
import numpy as np
from pathlib import Path
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator
from matplotlib import pyplot as plt
def split_text(text):
#用于jieba分词
word_list = ' '.join(jieba.cut(text))
return word_list
def draw_wordcloud(text,image_mask):
#以给定图片为轮廓显示词云
alice_mask = np.array(Image.open(image_mask))
wc = WordCloud(background_color="white", max_words=20, mask=alice_mask, contour_width=3,font_path = 'D:/学习/LMY_pythonlearn/msyh.ttf')
wc.generate(text)
image_Colors = ImageColorGenerator(alice_mask)
plt.figure(figsize=(14,8))
# 创建词云图
plt.imshow(wc.recolor(color_func= image_Colors ), interpolation='bilinear')
plt.axis('off')
plt.show()
text_path = Path('bilibili.txt')
with text_path.open(encoding='GB18030') as f:
text_content = f.read()
bilibili = split_text(text=text_content)
draw_wordcloud(text=str(bilibili),image_mask='alicepic.png')
123456789101112131415161718192021222324252627282930
需要注意的地方:
10行:jieba.cut返回的是一个generator,里面并不包含分割好的词,下一步用join时才执行计算。
16行:生成的词云需要指定字体,不然出来的词都是框框。无法显示,给个字体路径就好了。
30行:由于WordCloud词云读取的文本必须以字符串或者二进制形式输入,否则会报错TypeError: expected string or bytes-like object的关系,所以我们强制将jieba分词返回的list类型内容转换为str类型。