各位小伙伴我又来啦。今天带大家玩点好玩的东西,用Python抓取我们的微信好友个性签名,然后制作词云。怎样,有趣吧~好了,下面开始干活。我知道你们还是想先看看效果的。
后台登录:
词云:
环境准备
Python版本:3.6.0
系统平台:Windows 10 X64
IDE:pycharm
相关模块:
re模块;
itchat模块;
jieba模块;
import matplotlib.pyplot模块;
wordcloud模块;
以及一些Python自带的模块。
获取个性签名
首先要做的,当然还是登录微信,获取好友的个性签名啦:
1import itchat
2# 先登录
3itchat.login()
4
5# 获取好友列表
6friends = itchat.get_friends(update=True)[0:]
7for i in friends:
8 # 获取个性签名
9 signature = i["Signature"]
10print(signature)
但是获取下来之后我们会发现,有大量的span,class,emoji,emoji1f3c3等的字段:
这是因为个性签名中使用了表情符号,这些字段我们都是要过滤掉的,所以写个正则表达式然后用replace方法去掉吧。
过滤掉emoji表情
注:完整代码下载请移步留言区。
这次把相关字段给replace成空格先:
1# 获取好友列表
2friends = itchat.get_friends(update=True)[0:]
3for i in friends:
4 signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")# 获取个性签名
5 print(signature)
然后发现,还是不太妥当:
这里要借助一下re了,写个正则把这些统统干掉:
1# 获取好友列表
2friends = itchat.get_friends(update=True)[0:]
3for i in friends:
4 signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")# 获取个性签名
5 rep = re.compile("< =.+/>")# 正则匹配过滤掉emoji表情,例如emoji1f3c3等
6 signature = rep.sub("", signature)
7 print(signature)
为了照顾新手朋友,这里直接用了最简单的正则形式,把两端的尖括号直接匹配然后干掉,不过一般不推荐这样干。推荐用这样的表达式rep = re.compile("[^\u4e00-\u9fa5^]")。关于正则和re大家还是自己去找资料学习吧。然后perfect了:
制作词云
注:完整代码下载请移步留言区。
接下来用jieba分词,然后制作成词云,在此之前记得安装jieba和wordcloud库。
1# jieba分词
2wordlist_jieba = jieba.cut(text, cut_all=True)
3wl_space_split = " ".join(wordlist_jieba)
4
5# 这里要选择字体存放路径,win的字体在windows/Fonts中
6# #如果是中文必须要添加字体路径,否则会显示成框框
7my_wordcloud = WordCloud(background_color="white", width=1600, height=1200,
8 font_path='C:\Windows\Fonts\你的字体.ttf').generate(wl_space_split)
9
10plt.imshow(my_wordcloud)
11plt.axis("off")
12plt.show()
记得要设置好中文路径哦。
效果图:
完整代码如下:
1import itchat
2import re
3import jieba
4import matplotlib.pyplot as plt
5from wordcloud import WordCloud
6
7itchat.login()
8friends = itchat.get_friends(update=True)[0:]
9tList = []
10for i in friends:
11 signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")
12 rep = re.compile("< =.+/>")
13 signature = rep.sub("", signature)
14 tList.append(signature)
15
16# 拼接字符串
17text = "".join(tList)
18
19# jieba分词
20wordlist_jieba = jieba.cut(text, cut_all=True)
21wl_space_split = " ".join(wordlist_jieba)
22
23# 这里要选择字体存放路径,这里是Mac的,win的字体在windows/Fonts中
24# #如果是中文必须要添加字体路径,否则会显示成框框
25my_wordcloud = WordCloud(background_color="white", width=1600, height=1200,
26 font_path='C:\Windows\Fonts\你的字体.ttf').generate(wl_space_split)
27
28plt.imshow(my_wordcloud)
29plt.axis("off")
30plt.show()