itchat是一个开源的微信个人号接口,通过itchat可以实现消息的发送接受以及查看好友的信息等一些功能。还可以通过调用其他的api来实现与其他好友的自动对话,听起来就很高大上的样子。
下面是初步涉略itchat之后实现的一小小小部分功能 :
开发环境 :Windows10 + sublime以及正确的python环境和所需要用到的包(其他的包在以前的博客中有下载)
#下载本次所需要的包
pip install itchat
如果需要检查itchat是否安装好,首先按win + r,输入cmd,在命令框里输入python,进入python环境,然后import itchat,出现下图则说明安装正确(没有报错) :
接下来开始登陆微信,其实登陆微信只需要两行代码即可。在sublime中运行代码只需ctrl + b即可,运行后会弹出一张二维码的照片,用手机微信扫描授权登陆,在手机上的文件助手会收到消息 :
import itchat
# hotReload(热加载),短时间内不需要再次扫码登陆
itchat.auto_login(hotReload=True)
# 将“Hello FileHelper”发送给微信的文件助手
itchat.send(u"Hello FileHelper", "filehelper")
接下来获取微信好友的基本信息,以及自己给好友的备注 :
import itchat
# hotReload(热加载),短时间内不需要再次扫码登陆
itchat.auto_login(hotReload=True)
# 将“Hello FileHelper”发送给微信的文件助手
# itchat.send(u"Hello FileHelper", "filehelper")
# 获取微信好友的信息,返回的是字典
friends = itchat.get_friends(update=True)[0:]
print(friends)
上述代码运行后,出现的部分结果如下图所示(只截图了一个人) :
然后可以看到好友的注册的名字,你给好友的备注,好友性别等等信息,接下来统计一下你好友的个数,以及好友中男女的分布,需要注意的是,有部分人在注册的时候并没有填写性别,所以需要加一个其他的变量来保存 :
import itchat
# hotReload(热加载),短时间内不需要再次扫码登陆
itchat.auto_login(hotReload=True)
# 获取微信好友的信息,返回的是json格式的信息
friends = itchat.get_friends(update=True)[0:]
# print(friends)
# 初始化性别的变量
male = female = others = 0
# 循环得到的全部好友
# 在好友的信息中有Sex标签,发现规律是当其值为1是表示男生,2表示女生,0表示没有填写的
for i in friends[1:]:
sex = i['Sex']
if(sex == 1):
male += 1
elif(sex == 2):
female += 1
else:
others += 1
total = len(friends[2:])
# print(total)
print("男生好友比例 : %.2f%%" % (float(male) / total * 100) + "\n"
"女生好友比例 : %.2f%%" % (float(female) / total * 100) + "\n"
"不明性别好友 : %.2f%%" % (float(others) / total * 100))
上述代码统计了男女所占比例,其实可以根据个人需求去统计好友的地域分布或者当时取的非主流名字,运行结果如下 :
当然如果止步于此那就没什么意思了,所以我还将好友们的签名爬下来,并制作了一个词云,详细做词云的步骤可以点击下面网址跳转我的另一篇博客看一哈 :https://blog.csdn.net/ydydyd00/article/details/80665028
下面附上爬取好友签名并制作词云的全部代码:
import itchat
import re
import jieba
import matplotlib.pyplot as plt
import numpy as np
import PIL.Image as Image
from wordcloud import WordCloud, ImageColorGenerator
# 模拟登陆微信
# 参数hotReload(热加载)短时间内不需要重复扫描二维码登录
itchat.auto_login(hotReload=True)
# itchat.send(u'这是一条测试消息', 'filehelper')
friends = itchat.get_friends(update=True)[0:]
# print(friends)
siglist = []
male = female = others = 0
for i in friends[2:]:
sex = i['Sex']
if(sex == 1):
male += 1
elif(sex == 2):
female += 1
else:
others += 1
# print(i['Signature'])
# 有的好友签名中带有其他的表情什么的,先全部清掉
signature = i['Signature'].strip().replace(
"span", "").replace("class", "").replace("emoji", "")
rep = re.compile("1f\d+\w*|[<>/=]")
signature = rep.sub("", signature)
siglist.append(signature)
# 将处理好的签名加到text中
text = "".join(siglist)
total = len(friends[2:])
# print(total)
print("男生好友比例 : %.2f%%" % (float(male) / total * 100) + "\n"
"女生好友比例 : %.2f%%" % (float(female) / total * 100) + "\n"
"不明性别好友 : %.2f%%" % (float(others) / total * 100))
# 采用jieba分词,对生成的text进行分词
wordlist = jieba.cut(text, cut_all=True)
# 分词完成后在没个词之间加上空格
word_space_split = " ".join(wordlist)
cover = np.array(Image.open("F:\\Python_UP\\WordCloud\\image\\love.jpg"))
my_wordcloud = WordCloud(background_color="white",
max_words=2000,
mask=cover,
max_font_size=60,
random_state=42,
scale=2,
font_path="C:\\Windows\\Fonts\\STXINGKA.TTF").generate(word_space_split)
image_color = ImageColorGenerator(cover)
plt.imshow(my_wordcloud.recolor(color_func=image_color))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
生成词云如下图(好友逗比比较多,见谅。还有,我找不到其他字体了,只好用这个了) :