目录

  • Itchat简介
  • 1. 登录 获取好友信息
  • 2. 好友性别统计
  • 3. 好友省份统计
  • 4. 好友城市统计
  • 5. 好友头像获取
  • 6. 好友签名分析
  • 总结

Itchat简介

itchat官网:https://itchat.readthedocs.io/zh/latest/
itchat是一个开源的微信个人号接口
使用这个接口可以完成获取微信好友信息,发送信息,接收信息等操作
借此可以开发个人的微信机器人。
(目前发送信息等功能好像已被官方禁止)
现在我们只是用最基本的获取好友信息功能 来得到微信好友信息 并进行初步的分析统计


1. 登录 获取好友信息

首先当然是要安装这个开源包

pip install itchat

只需要一条命令就可以进行微信的扫码登录

import itchat
itchat.auto_login()

扫码后便会提示登陆了网页版微信 (ps: 新的微信账号貌似已经不支持网页版登陆了。。。)
登录之后便可以通过下面这条命令获取最新的好友信息

itchat.get_friends(update=True)

这里的update参数是代表是否重新获取最新信息 如果是False那么就会使用缓存信息
为了清楚地了解其内部数据结构 我们这里会将好友信息保存在本地 (效果同update=False一样)
代码如下:

if os.path.exists('friends.json') is False:with open("friends.json",'w') as f:  itchat.auto_login()friends = itchat.get_friends(update=True) json.dump(friends,f)print("save friends info.")
else:with open('friends.json','r') as lf:friends = json.load(lf)print('load friends info.')

此时我们将好友信息保存到了friends.json
我们可以查看一下里面的信息存储结构:

根据上图我们可以对好友的城市、省份、签名、性别、头像等进行统计分析

2. 好友性别统计

sex 代表着好友的性别 1:男 2:女 当然不能排除其它情况。。。0.0

def sex_analysis(friends):labels = ['男', '女', '其他']data = [0, 0, 0]# friends[0] 是自己的信息for friend in friends[1:]:sex = friend["Sex"]if sex == 1:data[0] += 1elif sex == 2:data[1] += 1else:data[2] += 1labels = [labels[i]+':'+str(data[i]) for i in range(len(labels))]plt.title("微信好友性别比例")plt.pie(data, labels=labels,autopct="%.2f%%")plt.savefig("sex.jpg")plt.show()

我们可以使用matplotlib根据这个统计结果生成一个饼状图

3. 好友省份统计

我们将各省拥有的好友个数进行统计 并排序 取top10
这里会有特殊的空(’’)省份需要去除

def prov_analysis(friends):prov_dict = defaultdict(int)for friend in friends[1:]:prov = friend['Province']prov_dict[prov] +=1prov_dict.pop('')prov_top10 = sorted(prov_dict.items(),key=lambda x:x[1],reverse=True)[:10]prov_name = [x[0] for x in prov_top10]prov_num = [x[1] for x in prov_top10]plt.bar(prov_name,prov_num,width=0.5,align='center',color='#87CEFA')for i in range(len(prov_num)):x = prov_name[i]y = prov_num[i]plt.text(x,y+1,'%s'%y,fontsize=10,ha='center')plt.ylabel("好友数量")plt.xlabel("省")plt.title("各省好友分布 TOP10")plt.savefig("province.jpg")plt.show()

同样将结果使用plt呈现

根据这个明显的省份分布 几乎可以断定。。该微信号是个浙江人

4. 好友城市统计

这个和省份统计基本一致

def city_analysis(friends):city_dict = defaultdict(int)for friend in friends[1:]:city = friend['City']city_dict[city] +=1city_dict.pop('')city_top10 = sorted(city_dict.items(),key=lambda x:x[1],reverse=True)[:10]city_name = [x[0] for x in city_top10]city_num = [x[1] for x in city_top10]plt.bar(city_name,city_num,width=0.5,align='center',color='#87CEFA')for i in range(len(city_num)):x = city_name[i]y = city_num[i]plt.text(x,y+1,'%s'%y,fontsize=10,ha='center')plt.ylabel("好友数量")plt.xlabel("城市")plt.title("各城市好友分布 TOP10")plt.savefig("city.jpg")plt.show()


分析上图:
该微信号在杭绍两城市 出生/工作
并在成都生活过一段时间

5. 好友头像获取

这个功能好像没什么能分析的。。。看看好友的头像是否非主流。。
这里需要注意
从缓存的friends.json好友信息中可以获取头像地址
但是下载头像是需要重新登陆的
我们在这里继续进行缓存 将头像保存在 photos/文件夹内
get_photo:下载好友头像图片
photo_merge: 拼接好友头像 生成一张大图

def get_photo(path):itchat.auto_login()friends = itchat.get_friends(update=True)[0:]num=0for i in friends:img = itchat.get_head_img(userName=i["UserName"])imgpath = path+str(num)+'.jpg'try:with open(imgpath,'wb') as imgf:imgf.write(img)except Exception as e:print("get err:",e)num+=1def photo_merge(friends):path='photos/'      if os.path.exists(path) is False:os.mkdir(path)flist = os.listdir(path)if len(flist)==0:get_photo(path)flist = os.listdir(path)line = int(math.sqrt(len(flist)))each_size = int(640/line)image= Image.new('RGB',(line*each_size,int(len(flist)/line)*each_size))x,y=0,0poslist = list(range(len(flist)))random.shuffle(poslist)for i in flist:try:pos = poslist.pop()img = Image.open(path+str(pos)+'.jpg')except IOError as e:passelse:img = img.resize((each_size,each_size),Image.ANTIALIAS)image.paste(img,(x*each_size,y*each_size))x+=1if x==line:x=0y+=1image.save("frinds_photo.jpg")img = plt.imread("frinds_photo.jpg")plt.imshow(img)plt.axis('off')plt.show()

注意: 为了让拼接的图片没有黑边 更加的好看
我们在拼接图片时会舍弃掉一些图片
假设我们有num张照片 sqrt(num) 取整 = n
我们会拼接n x n 大小的图片 整张图片大小为640x640 可以自由设定
每位好友的头像大小(640/n x 640/n)
结果如下图:

看上去挺壮观。。。。

6. 好友签名分析

这里我们会用到中文分词工具 jieba:https://github.com/fxsjy/jieba
我们将每一个好友签名 去除停用词 (这里只是初步手动去除 不全面)
拼接后 使用结巴进行分词
统计分词后词组的出现频率
使用词云(wordcloud)https://github.com/amueller/word_cloud 将这些词组展现出来
频率越高 词越大

def sig_analysis(friends):text = ''rule = re.compile("1fd+w*|[<>/=]")for fri in friends:sig = fri['Signature'].strip()if len(sig)>0 and not sig.startswith('<span'):sig = sig.replace("span",'').replace("class",'').replace("emoji","").replace("\n","").replace("00","")sig = rule.sub("",sig)text += sig + ' 'jiebatext = list(jieba.cut(text,cut_all=True))jiebatext = [x for x in jiebatext if len(x)>1]wordDic = dict(Counter(jiebatext))bgimg = plt.imread('bk.jpg')mywordcloud = wordcloud.WordCloud(font_path='jdxs.TTF',background_color="white",mask=bgimg,width=1200,height=1200)mywordcloud.generate_from_frequencies(wordDic)plt.imshow(mywordcloud)plt.axis("off")plt.show()mywordcloud.to_file("sigimg.png")

结果如下图

总结

虽然只是获取了最基础的微信好友信息
但我们已经能够从这些不起眼的数据中获取到一些有用的信息
好友数量 好友性别比例 用户生活城市等等
细思极恐0.0
那些并未开放 获取不到的信息里 是否已经将我们展示地一览无余

Python 使用itchat 获取微信好友信息并解析(性别 区域 头像 签名等)相关推荐

  1. python的itchat获取微信好友数量和性别统计

    python获取微信好友数量和性别统计 先安装itchat库 pip install itchat 源代码如下: 代码执行时会跳出二维码界面,通过手机微信扫码进行登录 import itchat# 登 ...

  2. Python使用itchat获取微信好友

    最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息. 目标: 获取好友列表 统计性别及城市分布 根据好友签名 ...

  3. python使用itchat获取微信好友列表

    ''' 微信字段:Nickname昵称,remarkName,备注,Sex,性别,Signature个性签名,'Province': '云南', 'City': '昆明' '''import itch ...

  4. python获取微信好友权限_Python-itchat获取微信好友信息

    参考自:http://www.jianshu.com/p/684cbdf15874 思路就是通过itchat登录获取微信好友信息,然后通过pillow画图 import itchat import m ...

  5. Python爬取的微信好友信息里我看到了自律 | CSDN博文精选

    作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) "stay hungry, stay foolish" "不舍爱与自由" "自律 ...

  6. itchat和php,Python使用itchat 功能分析微信好友性别和位置

    这样就将你所有微信好友的信息都返回了,我们并不需要这么多的信息,我们选取一些信息存储到 csv 文件中 注意:返回的信息是一个 list,其中第一个是我自己的信息,所以要从第二项开始 存储的文件 2: ...

  7. python分别统计男女人数_Python实践-itchat获取微信好友总人数以及男女比例

    1 itchat是微信的个人开放接口:本文利用Python+itchat实现简单的个人好友数量以及男女比例的统计 itchat 的安装:pip install itchat(需要权限的可以使用sudo ...

  8. 爬取微信好友信息,进行可视化分析(头像人脸识别部分已更新!)(代码已上传)

    [Code]下载 1.项目说明 本次项目主要实现了以下功能: 2.微信好友信息的获取与文件存储 3.微信好友性别分析 4.微信好友地区分布可视化 5.微信好友个性签名词云图及好友备注词云图 6.微信好 ...

  9. python获取pc微信好友列表_python使用itchat获取微信好友列表

    ''' 微信字段:Nickname昵称,remarkName,备注,Sex,性别,Signature个性签名,'Province': '云南', 'City': '昆明' ''' import itc ...

  10. 基于itchat获取微信好友头像

    itchat貌似又解封了.. 关于微信好友这块就到此结束吧,也没啥新意了-- 上代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import itch ...

最新文章

  1. 浙大1202 zoj1202
  2. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优
  3. 手把手教你求职进入BAT
  4. CentOS7下解决yum install mysql-server没有可用包的问题
  5. Django完整的开发一个博客系统
  6. 黑莓发布企业服务SWS 兼容Android和iOS设备
  7. 我今天学习的技术,明天会不会一钱不值
  8. c语言中字母后面的 是什么意思,C语言中括号里面一个字母是什么意思
  9. phpmyadmin误删表后如何恢复
  10. win10的文件夹(文件资源管理器)卡住了
  11. 干扰网络信号的app_解决无线网络干扰的五种方法
  12. 阿里巴巴sign参数解密
  13. 论神奇宝贝小智精灵联盟名次的类指数型变化
  14. pygame: libpng warning: iCCP: known incorrect sRGB profile 报错
  15. 云服务器  虚拟主机  服务器
  16. 产品读书《创业36条军规》
  17. 多元函数式子两端微分
  18. 玫瑰颜色各代表什么含义?
  19. Hungry Student Problem_Codeforces
  20. html模拟自动点击

热门文章

  1. 平面设计构成原理分享
  2. 妈妈帮上云之路:云上平台架构与运维实践
  3. html 插入 flv,HTML中嵌入FLV视频文件
  4. 数据透视表mysql_MySQL查询和数据透视表
  5. AWS扩容硬盘(转)
  6. 基于PCA算法生成平均脸
  7. crx插件转换火狐插件_我的Firefox插件
  8. Neural Turing Machines-NTM系列
  9. iperf3带宽测试工具
  10. Python 做一个属于自己的web网站