B站爬取《啥是佩奇》弹幕--词云图

268 阅读1分钟

这是我参与8月更文挑战的第7天,活动详情查看:   8月更文挑战

前言

  • 词云 (WordCloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法。目前已有多种数据分析工具支持这种图形,如Matlab, SPSS, SAS, R 和 Python 等等,也有很多在线网页能生成 wordcloud。

1. 网站分析及其源数据获取--《啥是佩奇》B站视频弹幕

1628334959(1).jpg

  • 分析
    1. 首先,由图中可知,此视频共有882条弹幕
    2. 接下来进入按下F12键进入开发者模式获取弹幕源数据
      • 注:B站的弹幕数据有现成接口,只需找到对应视频的cid值即可
      • 弹幕共有882条,cid=72342029 1628336358(1).jpg

2. 数据获取--绕过需要cookies的接口获取数据

# -!- coding: utf-8 -!- 
from bs4 import BeautifulSoup # 解析HTML,XML文档
import numpy as np 
import requests 

# 获取数据 

# 目标url
url = 'http://comment.bilibili.com/72342029.xml' 
# 向目标url发送get请求
html = requests.get(url).content 
html_data = str(html, 'utf-8') 
soup = BeautifulSoup(html_data, 'lxml') 
results = soup.find_all('d') 

comments = [comment.text for comment in results] 
comments_dict = {'comments': comments} 

df = pd.DataFrame(comments_dict) 
df.to_csv('bilibili.csv', encoding='utf-8')

1628340700(1).jpg 成功获取到882条弹幕

3. 数据可视化

from PIL import Image 
from wordcloud import WordCloud, ImageColorGenerator 
import matplotlib.pyplot as plt 
import pandas as pd 
import jieba 

# jieba分词,对弹幕数据生成词云 
df = pd.read_csv('bilibili.csv', header=None) 

text = '' 
for line in df[1]: 
    text += ' '.join(jieba.cut(line, cut_all=False)) 

#background_Image = plt.imread('peiqi_1.jpg') 
background_Image = np.array(Image.open("peiqi_1.jpg")) 
wc = WordCloud( 
    background_color='white', 
    mask=background_Image, 
    font_path='C:\Windows\Fonts\simhei.ttf', 
    max_words=2000, 
    max_font_size=80, 
    random_state=30, 
) 

wc.generate_from_text(text) 
# 看看词频高的有哪些,把无用信息去除 
process_word = WordCloud.process_text(wc, text) 
sort = sorted(process_word.items(), key=lambda e:e[1], reverse=True) print(sort[:50]) 
mg_colors = ImageColorGenerator(background_Image) wc.recolor(color_func=img_colors) 
plt.imshow(wc) 
plt.axis('off') 
wc.to_file("peggy.jpg") 
print('Yeah Successfully!')

1628341125(1).png