Python 使用itchat 获取微信好友信息并解析(性别 区域 头像 签名等)
目录
- 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 获取微信好友信息并解析(性别 区域 头像 签名等)相关推荐
- python的itchat获取微信好友数量和性别统计
python获取微信好友数量和性别统计 先安装itchat库 pip install itchat 源代码如下: 代码执行时会跳出二维码界面,通过手机微信扫码进行登录 import itchat# 登 ...
- Python使用itchat获取微信好友
最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息. 目标: 获取好友列表 统计性别及城市分布 根据好友签名 ...
- python使用itchat获取微信好友列表
''' 微信字段:Nickname昵称,remarkName,备注,Sex,性别,Signature个性签名,'Province': '云南', 'City': '昆明' '''import itch ...
- python获取微信好友权限_Python-itchat获取微信好友信息
参考自:http://www.jianshu.com/p/684cbdf15874 思路就是通过itchat登录获取微信好友信息,然后通过pillow画图 import itchat import m ...
- Python爬取的微信好友信息里我看到了自律 | CSDN博文精选
作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) "stay hungry, stay foolish" "不舍爱与自由" "自律 ...
- itchat和php,Python使用itchat 功能分析微信好友性别和位置
这样就将你所有微信好友的信息都返回了,我们并不需要这么多的信息,我们选取一些信息存储到 csv 文件中 注意:返回的信息是一个 list,其中第一个是我自己的信息,所以要从第二项开始 存储的文件 2: ...
- python分别统计男女人数_Python实践-itchat获取微信好友总人数以及男女比例
1 itchat是微信的个人开放接口:本文利用Python+itchat实现简单的个人好友数量以及男女比例的统计 itchat 的安装:pip install itchat(需要权限的可以使用sudo ...
- 爬取微信好友信息,进行可视化分析(头像人脸识别部分已更新!)(代码已上传)
[Code]下载 1.项目说明 本次项目主要实现了以下功能: 2.微信好友信息的获取与文件存储 3.微信好友性别分析 4.微信好友地区分布可视化 5.微信好友个性签名词云图及好友备注词云图 6.微信好 ...
- python获取pc微信好友列表_python使用itchat获取微信好友列表
''' 微信字段:Nickname昵称,remarkName,备注,Sex,性别,Signature个性签名,'Province': '云南', 'City': '昆明' ''' import itc ...
- 基于itchat获取微信好友头像
itchat貌似又解封了.. 关于微信好友这块就到此结束吧,也没啥新意了-- 上代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import itch ...
最新文章
- 浙大1202 zoj1202
- 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优
- 手把手教你求职进入BAT
- CentOS7下解决yum install mysql-server没有可用包的问题
- Django完整的开发一个博客系统
- 黑莓发布企业服务SWS 兼容Android和iOS设备
- 我今天学习的技术,明天会不会一钱不值
- c语言中字母后面的 是什么意思,C语言中括号里面一个字母是什么意思
- phpmyadmin误删表后如何恢复
- win10的文件夹(文件资源管理器)卡住了
- 干扰网络信号的app_解决无线网络干扰的五种方法
- 阿里巴巴sign参数解密
- 论神奇宝贝小智精灵联盟名次的类指数型变化
- pygame: libpng warning: iCCP: known incorrect sRGB profile 报错
- 云服务器 虚拟主机 服务器
- 产品读书《创业36条军规》
- 多元函数式子两端微分
- 玫瑰颜色各代表什么含义?
- Hungry Student Problem_Codeforces
- html模拟自动点击