诗曰:
万姓熙熙育化中,三登之世乐无穷。岂知礼乐笙镛治,变作兵戈剑戟丛。
水浒寨中屯节侠,梁山泊内聚英雄。细推治乱兴亡数,尽数阴阳造化功。
开发环境
- python3.7
- requests模块 -lxml模块 -PIL模块
- -jieba模块 -wordcloud模块 -numpy模块
获取分析
既然是108将,那就从最简单的108将百度百科里获取好汉的名字。通过源代码发现该页面为静态页面,直接请求就能获取。
#百度百科108将好汉
url = "https://baike.baidu.com/item/%E4%B8%80%E7%99%BE%E5%8D%95%E5%85%AB%E5%B0%86/19408?fromtitle=108%E5%B0%86&fromid=164941&fr=aladdin"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
response = requests.get(url,headers = headers).content.decode('utf-8')
html = etree.HTML(response)
persons = html.xpath('//body/div[3]/div[2]/div/div[2]/table//tr/td[4]/div/a//text()')
获取到108位好汉的名字后,将这108位好汉的名字添加到jieba模块里的字典里,以便准确分词。
#词频统计
a = ''.join(lines)
fenci = jieba.cut(a,cut_all=True)
for one in persons:
wordict[one] = 0
for word in fenci:
if word in persons:
wordict[word] = wordict[word] + 1
else:
pass
x = dict(wordict.items()) #词频{宋江:4000,林冲:2000}
上述分词得到词频,运用PIL模块以及wordcloud模块来制作生成词云。
#绘制图云
img = PIL.Image.open('timg1.jpg') #打开模板图片
img_array = np.array(img)
wc = wordcloud.WordCloud(
background_color='black',
mask=img_array,
font_path="C:\\Windows\\Fonts\\simsun.ttc"
)
wc.generate_from_frequencies(x)#词频生成词云
wc.to_file('小形状词云.jpg') #保存图片