首先打开B站地址:https://www.bilibili.com/video/av73262911
然后打开检查,选择net
查找到list.so这个文件,找到我们需要的地址:
https://api.bilibili.com/x/v1/dm/list.so?oid=125428649
这个地址就是存放弹幕的文件
接下来我们之间用request模块去get文本,BeautifulSoup去处理获取文字,然后导入到词云
# 导入扩展库 import re # 正则表达式库 import collections # 词频统计库 import numpy as np # numpy数据处理库 import jieba # 结巴分词 import wordcloud # 词云展示库 from PIL import Image # 图像处理库 import matplotlib.pyplot as plt # 图像展示库 import requests # 网络爬取 from bs4 import BeautifulSoup # html解析 url = "https://api.bilibili.com/x/v1/dm/list.so?oid=125428649" # 弹幕地址 page = requests.get(url) # 获取文本 page.encoding = 'utf-8' soup = BeautifulSoup(page.text, 'html.parser') content = soup.find_all('d') string_data = '' for i in content: string_data = string_data + i.text print(string_data) # 文本预处理 pattern = re.compile(u' | |.|-|:|;|)|(|?|"|(|)|《|》|:|?|!') # 定义正则表达式匹配模式,匹配所有的标点空格,u是标志Unicode的编码字符 string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除 # 文本分词 seg_list_exact = jieba.cut(string_data, cut_all=False) # 精确模式分词 object_list = [] remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了', u'通常', u'如果', u'我们', u'需要'] # 自定义去除词库 for word in seg_list_exact: # 循环读出每个分词 if word not in remove_words: # 如果不在去除词库中 object_list.append(word) # 分词追加到列表 # 词频统计 word_counts = collections.Counter(object_list) # 对分词做词频统计 word_counts_top10 = word_counts.most_common(10) # 获取前10最高频的词 print(word_counts_top10) # 输出检查 # print(word_counts) # 词频展示 mask = np.array(Image.open('xin.jpg')) # 定义词频背景 wc = wordcloud.WordCloud( font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式 background_color="white", mask=mask, # 设置背景图 max_words=200, # 最多显示词数 # max_font_size=100 # 字体最大值 ) wc.generate_from_frequencies(word_counts) # 从字典生成词云 image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案 wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案 plt.imshow(wc) # 显示词云 plt.axis('off') # 关闭坐标轴 plt.show() # 显示图像
效果如下: