ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过bilibili_api获取bilibili弹幕+绘制词云的方法!

2020-08-28 20:33:29  阅读:383  来源: 互联网

标签:jieba text mask bilibili api 词云 import 弹幕


由于自己学艺不精,后续词云的简略代码没怎么看懂,梳理了一遍把整个的学习内容记录下来。主要参考的为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类型。

标签:jieba,text,mask,bilibili,api,词云,import,弹幕
来源: https://www.cnblogs.com/A3535/p/13579750.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有