Python 对网页内容作词云图分析

在线生成词云图

  • WordArt

定制性比较强,支持中文,但是图中的词需要手动输入。

https://wordart.com/

  • 图悦

支持分析大段文字并生成词云图,但是功能相对比较简单。

http://www.picdata.cn/picdata/index.php

Python 生成词云图

本文介绍使用 Python 程序生成词云图,它依赖的三方库 wordcloud 需要编译 C++ 库,在 Windows 搭建环境比较复杂,建议在 Linux 系统中安装使用。

下例中使用了 urllib 库从抓取网页内容,jieba 库用于分词,wordcould 库用于生成词云,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
import urllib.request
import html2text
%matplotlib inline

#url = 'https://mp.weixin.qq.com/s/Pr04533M2chdA3pVA8idNA'
url = 'http://baijiahao.baidu.com/s?id=1645663163087703799&wfr=spider&for=pc'
page = urllib.request.urlopen(url)
contents = page.read().decode()
h = html2text.HTML2Text()
h.ignore_links=True # 去掉超链接
text = h.handle(contents)
text = text.replace(' ', '')
text = text.replace('*', '')
text = text.replace('\n', ' ')
cut_text = jieba.cut(text) # 分词
result = " ".join(cut_text)
print(result)
wc = WordCloud(
font_path='simhei.ttf',
background_color='white',
width=1000,
height=600,
max_font_size=50,
min_font_size=10,
max_words=200,
mask=plt.imread('star.jpg') #mask图片
)
wc.generate(result)
wc.to_file('ciyun.png') #图片保存
plt.imshow(wc) # 显示图片
plt.axis('off') #关闭坐标
plt.show()

读者替换网址后,重新运行即可生成词云图。其中的 mask 图片用于设置词云的形状,本例中使用了背景为白色,前景为黑色的图片 star.jpg(注意使用 jpg 格式图片),效果如下图所示(左侧为 mask,右侧为生成的词云图):