看到一篇有意思的博客 利用微信开放的接口 itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码
首先要 import itchat 库 这个是微信开源的一个接口 用于登录微信并且查看账户里好友信息服务的
2 种导入方法 都可以快速下载库
1. 在 cmd 里可以直接 pip3 install itchat 2. 在 pycharm 中可以依次 File-->Settings-->Project xxx 项目 -->Project Interpreter --> + --> 搜索里面输入 itchat --> install Package
如果还不知道怎么导库 百度搜 肯定可以解决
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一. 可以利用 itchat 获取好友的男女比例, 好友的地域分布 上代码
里面需要 import 3 个包 (itchat,pandas,matplotlib)用上面讲过的相同方法下载库
显示效果为
- import itchat
- #生成一个验证码
- itchat.login()
- itchat.auto_login(enableCmdQR=True)
- #获取好友信息
- friends=itchat.get_friends(update=True)
- #查看男女的比例
- male=1
- female=0
- other=0
- #friends=[0]是自己 所有我们要从[1:]
- for i in friends[1:]:
- print(i)
- sex =i['Sex'] #1 是男性 2 女性
- if(sex==1):
- male+=1
- elif(sex==2):
- female+=1
- else:
- other+=1
- total =len(friends[1:])
- print('好友总人数:',total)
- print('男性比例:/%%'%(float(male)/total*100))
- print('女性比例:/%%'%(float(female)/total*100))
- print('未知比例:/%%'%(float(other)/total*100))
- #绘制图形 --》统计图
- arr=['1']*male #男性
- arr1=['2']*female #女性
- arr2=['0']*other #未知
- #吧数据组合一起 数据可视化
- arr.extend(arr1)
- arr.extend(arr2)
- import matplotlib.pyplot as plt
- #将数据转化为一维数据
- plt.hist(arr)
- plt.show()
- #获取所有数据
- #昵称 , 性别, 省份 , 城市, 个性签名
- import pandas as pd
- data =pd.DataFrame()
- colums =['NickName','Sex','Province','City','Signature']
- for col in colums:
- val =[]
- #得到好友
- for r in friends[1:]:
- val.append(r[col])
- data[col] =pd.Series(val)
- #城市的分布
- #绘制柱状型
- #设置字体
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.bar(data['Province'].value_counts().index,data['Province'].value_counts())
- plt.xticks(rotation='90') #图片旋转 90 度
- plt.show()
- #查看浙江好友分布情况
- gd= data[data['Province']== '浙江']['City']
- plt.bar(gd.value_counts().index,gd.value_counts())
- plt.show()
二. 可以根据获取的好友个性签名 制作词云 比如下图
上代码
由于这个用到的东西多一些 需要导入的包也 多一些 但是没关系 缺少哪个库就对应下载哪个库 下载库的方法都一样
说一下 需要更改的地方
1. 第 37 行 alice_coloring = np.array(Image.open(os.path.join(r'C:\Users\Administrator\Desktop', 'iphone.jpg')))
C:\Users\Administrator\Desktop 改为存放图片的路径 iPhone.jpg 改为你自己图片的名称
2. 第 62 行 my_wordcloud.to_file(os.path.join('F:\\', 'wechat_cloud.PNG')) 作用是将生成图片放入指定文件夹中 你可以更改放到你想放的路径 改完之后 63 行的路径也要改 当然如果偷懒的话 也可以不改 你会发现 F 盘下 有你生成的文件
- import itchat
- import re
- # 先登录, 扫二维码登录微信
- itchat.login()
- # 获取好友列表, 返回的是 JSON 信息
- friends = itchat.get_friends(update=True)[0:]
- # 打印好友列表信息
- # print(friends)
- tList = []
- for i in friends:
- # 获取个性签名, 替换掉 span,class,emoji
- signature = i["Signature"].replace("","").replace("span", "").replace("class","").replace("emoji", "")
- # 正则匹配过滤掉 emoji 表情, 例如 emoji1f3c3 等
- rep = re.compile("1f\d.+")
- signature = rep.sub("", signature)
- tList.append(signature)
- # 拼接字符串
- text = "".join(tList)
- # jieba 分词
- import jieba
- wordlist_jieba = jieba.cut(text, cut_all=True)
- wl_space_split = " ".join(wordlist_jieba)
- # wordcloud 词云
- import matplotlib.pyplot as plt
- from wordcloud import WordCloud, ImageColorGenerator
- import os
- import numpy as np
- import PIL.Image as Image
- # d = os.path.dirname(__file__)
- # 找一张微信 logo 图来生成配色方案, 微信 logo 图 wechat.jpg 路径在 F:\\ 盘下
- alice_coloring = np.array(Image.open(os.path.join(r'C:\Users\Administrator\Desktop', 'iphone.jpg')))
- # 这里要选择字体存放路径, win 的字体在 C:/Windows/Fonts 中
- """#my_wordcloud = WordCloud().generate(wl_space_split) 默认构造函数
- my_wordcloud = WordCloud(
- background_color='white', # 设置背景颜色
- mask = abel_mask, # 设置背景图片
- max_words = 200, # 设置最大显示的字数
- stopwords = STOPWORDS, # 设置停用词
- font_path = C:/Users/Windows/fonts/simkai.ttf', # 设置字体格式, 如不设置显示不了中文
- max_font_size = 50, # 设置字体最大值
- random_state = 30, # 设置有多少种随机生成状态, 即有多少种配色方案
- scale=.5
- ).generate(wl_space_split)""" my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
- max_font_size=40, random_state=42,
- font_path='C:/Windows/Fonts/simhei.ttf') \
- .generate(wl_space_split)
- image_colors = ImageColorGenerator(alice_coloring)
- plt.imshow(my_wordcloud.recolor(color_func=image_colors))
- plt.imshow(my_wordcloud)
- plt.axis("off")
- plt.show()
- # 保存图片到 F:\\ 盘下 并发送到手机里的文件传输助手 (filehelper) 里
- my_wordcloud.to_file(os.path.join('F:\\', 'wechat_cloud.PNG'))
- itchat.send_image("F:\\wechat_cloud.png", 'filehelper')
来源: https://www.cnblogs.com/bob-jianfeng/p/10310991.html