爬取MV弹幕,制作词云图(二)

词图云的制作费了整整一天,好在功夫不负有心人,成功搞出来了,就在这抓耳挠腮的过程中出现的问题,如何解决的跟大家分享一下!

1、导入wordcloud库

wordcloud绝对的必不可少,本人用pycharm做的,装wordcloud库的时候出现各种问题,比如settings环境可添加的库中根本就没有wordcloud库,只有一个r-wordcloud2,但是用不了,所以就没办法啊,没有库我怎么装!
还有一个方法嘞,直接去这个链接[(注意!一定要选对python的版本以及电脑的型号(https://www.lfd.uci.edu/~gohlke/pythonlibs/)]下载whl后缀的文件。打开cmd,然后pip install ,如果出现没有支持的wheel,然后pip install wheel,如果还是不行,那就是下载错版本了,本人就是死在这儿啦!!!!!!

2、去掉停用词

啥意思?文本里的文字都有用吗?显然不是,‘了’‘的’什么乱七八糟的根本就没有用啊!显示它干嘛!果断去掉,去这里找一个表下载下来。
[停用词链接表]https://github.com/goto456/stopwords

3、词图云背景图

词图云这个背景图,一定要注意一下!这个图形可是不简单,要求是png格式的,啥意思那?就是它需要你的背景图是一个透明图,看下图,红心周围白色的底遮挡住后面的字了,这就不是透明的
在这里插入图片描述
下面这张图那就是透明的了,除了红心部分,红心白底就透明面了,后面的字已经显示出来了!提醒:千万不要去网上下载什么后缀值png的图片,没有用,下载下来依然不透明。一个小技巧自己制作:一定选PowerPoint,WPS不行,插入图片,点击图片会出来"格式",点击“颜色”,有个“设置透明色”,然后点击红心周围的空白,就OK了!保存到工作路径!齐活
在这里插入图片描述

4、词图云参数

就说一个font_path,这个字体是windows自带的字体,找好路径,一般是在C盘的windows下的Fonts下全是字体,你就找你喜欢的吧!
其他的参数,有个小姐姐翻译的比较好,推荐![https://blog.csdn.net/zjw_python/article/details/79003888]

5、上代码!

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

warnings.filterwarnings('ignore')

# 读取文本文件并进行分词
with open(r'dan_mu.text', encoding='utf-8') as f:
    txt1 = f.read()
txt = txt1.split()
data_cut = [jieba.lcut(x) for x in txt]
# jieba.lcut(x)直接生成一个list


# 读取停用词
with open(r"stopwords.txt", encoding='utf-8') as f:
    stop = f.read()
stop = stop.split()
# 去掉停用词之后的最终词
s_data_cut = pd.Series(data_cut)
all_words_after = s_data_cut.apply(lambda x: [i for i in x if i not in stop])
# apply的应用这个地方还是比较简洁的


# 词频统计
all_words = []
for i in all_words_after:
    all_words.extend(i)
word_count = pd.Series(all_words).value_counts()
# 这里比用字典要简单多了


# 词云图绘制
# 1)读取背景图片
back_picture =np.array(Image.open('D:\\爬虫\\xin.jpg'))
# 这里的图片已经处理过了,即使后缀是jpg,不是png它也已经是透明图了
# 这里要用到numpy库,据说是把图片搞成一个矩阵的形式,本来也用了imread,奈何不太好用


# 2)设置云参数
wc = WordCloud(font_path='C:\\Windows\\Fonts\\simkai.ttf',
               background_color='white',
               scale=10,
               # 调整文字的虚真程度
               max_words=100,
               mask=back_picture,
               # mask就是加入的背景图片的区域
               max_font_size=100,
               mode='RGBA',
               random_state=42)
wc2 = wc.fit_words(word_count)
# 根据给定的单词以及频率生成词图云
image_colors = ImageColorGenerator(back_picture)
# 根据图片的背景生成字体的颜色

# 3)绘制词图云
plt.figure(figsize=(16, 8))
plt.imshow(back_picture)
plt.imshow(wc2.recolor(color_func=image_colors))
plt.axis('off')
plt.show()
wc.to_file('ciyun.png')

运行出来的结果,是下面这个样子滴!
在这里插入图片描述

好的,下面是具体步骤: 首先,我们需要导入所需的库,包括 requests、BeautifulSoup、jieba 和 wordcloud。 ```python import requests from bs4 import BeautifulSoup import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt ``` 接下来,我们需要爬取百度热搜的页面内容,并使用 BeautifulSoup 进行解析,提取出热搜的关键词列表。 ```python url = 'http://top.baidu.com/buzz?b=1&fr=topindex' html = requests.get(url).text soup = BeautifulSoup(html, 'html.parser') hot_list = [] for item in soup.select('.list-table tr'): try: hot_list.append(item.select('.keyword a')[0].text) except: pass ``` 接下来,我们需要将关键词列表进行分词,并使用 jieba 库来进行分词操作。 ```python text = ' '.join(jieba.cut(''.join(hot_list))) ``` 接下来,我们就可以利用 WordCloud 库生成词云图了。首先,我们需要先设置一下词云图的参数,包括背景颜色、字体、图片尺寸等。然后,我们可以使用 `generate()` 函数来生成词云图。 ```python wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600).generate(text) ``` 最后,我们可以使用 matplotlib.pyplot 库中的 `imshow()` 函数来显示词云图。 ```python plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 完整代码如下: ```python import requests from bs4 import BeautifulSoup import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt url = 'http://top.baidu.com/buzz?b=1&fr=topindex' html = requests.get(url).text soup = BeautifulSoup(html, 'html.parser') hot_list = [] for item in soup.select('.list-table tr'): try: hot_list.append(item.select('.keyword a')[0].text) except: pass text = ' '.join(jieba.cut(''.join(hot_list))) wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600).generate(text) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() ``` 执行完上述代码后,就可以得到一张基于百度热搜关键词的词云图了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值