偶然间听闻 itchat 模块可以用于实现微信好友信息采集、消息收发管理,于是闲来无事玩一玩,只是简单实现了好友性别统计、地域分布统计、个性签名爬取展示以及头像的爬取拼接,还有很多更强大的功能,有兴趣的读者可以通过模块官方文档深入探索。
0、读取数据,搞懂数据
因为获取好友信息需要手机授权登录网页版,所以为了避免频繁扫码登录,我们在一次登录后把好友列表信息在本地持久化保存,以下是这段功能的代码:
import itchat
import pickle
itchat.login() # 会自动弹出一个二维码,手机微信扫描授权网页版登录后方可爬取相关信息
my_friends = itchat.get_friends(update=True)[0:] # 获取通讯录好友的信息,返回一个好友信息的字典
# 持久化保存数据,统计好友相关信息时无需再次扫码登录
with open('../data/my_friends.pickle', 'wb') as e:
pickle.dump(my_friends, e)
这里保存的 my_friends 是好友列表,列表的元素是每个好友的信息,信息由字典表示,具体来说 my_friends = [ {好友1},{好友2},·····,{好友n} ],每一个好友字典的 key 如下表(给出了部分注解,还有一些没搞明白):
key | 注解 |
---|---|
MemberList | 不明 |
Uin | 不明 |
UserName | 微信系统内的用户编码标识 |
NickName | 好友昵称 |
HeadImgUrl | 微信系统内的头像URL |
ContactFlag | 不明 |
MemberCount | 不明 |
RemarkName | 你给好友的备注名 |
HideInputBarFlag | 不明 |
Sex | 性别 |
Signature | 个性签名 |
VerifyFlag | 不明 |
OwnerUin | 不明 |
PYInitial | 昵称的简拼 |
PYQuanPin | 昵称的全拼 |
RemarkPYInitial | 备注名的简拼 |
RemarkPYQuanPin | 备注名的全拼 |
StarFriend | 是否星标好友 |
AppAccountFlag | 不明 |
Statues | 不明 |
AttrStatus | 不明 |
Province | 省份 |
City | 城市 |
Alias | 不明 |
SnsFlag | 不明 |
UniFriend | 不明 |
DisplayName | 不明 |
ChatRoomId | 不明 |
KeyWord | 不明 |
EncryChatRoomId | 不明 |
IsOwner | 不明 |
搞清楚了返回结果的数据结构,接下来的事情就很简单了。
1、好友的性别统计
我将统计性别的代码统一在一个 statistic_friends_dict 函数中:
def statistic_friends_sex(friends_dict):
"""
该函数功能为实现 friends_dict 中性别统计
:param friends_dict: itchat.get_friends()返回的好友字典
:return: 男、女、性别未填写的人数 [#male, #female, #unknown]
"""
result = [0, 0, 0]
for friend in friends_dict[