Python使用itchat获取微信好友
最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息。
目标:
- 获取好友列表
- 统计性别及城市分布
- 根据好友签名生成词云
获取好友信息
- 前文说了,itchat其实是调用微信网页版的接口,所以登陆的时候会弹出二维码进行登陆,然后通过itchat.get_friends获取好友信息就好了,相当简单。
# -*- coding: utf-8 -*- import itchat import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import warnings import jieba import re from scipy.misc import imread from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator itchat.login() #登陆网页版微信,需要手机扫码确认 warnings.filterwarnings("ignore")
- 获取好友信息的时候需要注意一点,因为好友列表中第一位是自己,所以从第二位开始保存。
friends = itchat.get_friends(update=True) for counter,content in enumerate(friends[1:]): if counter == 0: df=pd.DataFrame(content) df.columns=content.keys() else: df.loc[counter]=content.values() print '获取到%d位好友信息'%counter df.columns
- 字段信息如下:
Index([u'UserName', u'City', u'DisplayName', u'UniFriend', u'MemberList', u'PYQuanPin', u'RemarkPYInitial', u'Sex', u'AppAccountFlag', u'VerifyFlag', u'Province', u'KeyWord', u'RemarkName', u'PYInitial', u'IsOwner', u'ChatRoomId', u'HideInputBarFlag', u'EncryChatRoomId', u'AttrStatus', u'SnsFlag', u'MemberCount', u'OwnerUin', u'Alias', u'Signature', u'ContactFlag', u'NickName', u'RemarkPYQuanPin', u'HeadImgUrl', u'Uin', u'StarFriend', u'Statues'], dtype='object')
好友城市分布
- 因为微信中位置信息是两级,省份和城市,对于北京上海这种直辖市,City字段中保存的是区的信息,这个部分做了下处理改为相应的城市名。
df['City'][df['Province']==u'北京']= u'北京' df['City'][df['Province']==u'上海']= u'上海' df['City'][df['Province']==u'重庆']= u'重庆' #微信对于直辖市将city字段填写为区 plt.figure(figsize = (15,12)) data_temp = df[df['City']!=''] #剔除城市未填写的记录 data_temp = data_temp.groupby(['City'])['UserName'].count().reset_index() data_temp = data_temp.nlargest(15,'UserName') data_temp.columns = ['City','Count'] sns.barplot(data=data_temp ,y='City',x='Count') for y,x in enumerate(data_temp['Count']): plt.text(x,y,x,fontsize = 20) plt.title(u'好友城市分布',fontsize =25) plt.show()
-
只取了前15位,效果如下:
性别分布
- Sex字段中有0,1,2三个值,分别代表性别不明,男,女,相应的replace一下就好。
df['Sex'] = df['Sex'].replace({0:u'性别不明',1:u'男',2:u'女'}) plt.figure(figsize = (15,8)) plt.subplot(1,2,1) data_temp = df.groupby(['Sex'])['UserName'].count().reset_index() data_temp = data_temp.sort_values('UserName') data_temp.columns = ['Sex','Count'] sns.barplot(data=data_temp ,x='Sex',y='Count') for x,y in enumerate(data_temp['Count']): plt.text(x-0.05,y,y,fontsize = 20) plt.subplot(1,2,2) sex_list = [u'男',u'女',u'性别不明'] countlist = [292,227,25] explode = (0.05,0,0) plt.pie(countlist,labels = sex_list,explode =explode,startangle = 90,autopct = '%3.1f%%') plt.axis('equal') plt.show()
-
效果如下:
根据好友签名绘制词云
- Signature中保存的是好友签名,开始试了一次,发现签名中emoji表情占了好大的比例,后面用正则表达式处理了下,只保留了汉字部分。
back_color = imread('tencent.jpg') # 解析该图片 wc = WordCloud(background_color='white', # 背景颜色 max_words=1000, # 最大词数 mask=back_color, # 以该参数值作图绘制词云,这个参数不为空时,width和height会被忽略 max_font_size=100, # 显示字体的最大值 font_path="/Users/tangwenpan/Downloads/simhei.ttf", # 解决显示口字型乱码问题 random_state=42, # 为每个词返回一个PIL颜色 ) text='' xx= u"[\u4e00-\u9fa5]" #保留汉字 for x in df['Signature']: pattern = re.compile(xx) text_temp = pattern.findall(x) for xxx in text_temp: text = text +xxx def word_cloud(texts): words_list = [] word_generator = jieba.cut(texts, cut_all=False) # 返回的是一个迭代器 for word in word_generator: if len(word) > 1: #去掉单字 words_list.append(word) return ' '.join(words_list) text = word_cloud(text) wc.generate(text) # 基于彩色图像生成相应彩色 image_colors = ImageColorGenerator(back_color) plt.figure(figsize = (15,15)) plt.axis('off') # 绘制词云 plt.imshow(wc.recolor(color_func=image_colors)) plt.axis('off') # 保存图片 wc.to_file('comment.png') print 'comment.png has bee saved!'
-
使用背景图片
-
效果如下:
peace~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
吴恩达《机器学习》课程总结(5)Octave教程
推荐使用python,本节略。
- 下一篇
「架构技术专题」作为java程序员的你还不知道网站架构的演化(2)?
说道大型网站,就的先说大型网站的特点:高并发,大流量,高可用,海量数据等。下面就说说大型网站的架构演化过程,通过一步步的演化,我们就可以清晰直观地知道,究竟为什么要这么做? 6、使用反向代理和CDN加上网站相应 提高网站的访问速度,主要手段有使用CDN和反向代理。 CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,如果反向代理缓存着用户请求的资源,则直接返回给用户。 7、使用分布式文件系统和分布式数据库系统 任何强大的单一服务器都满足不了大型网站持续增长的业务需求。 分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。 8、使用NoSQL和搜索引擎 搜素引擎也基本已经形成现在大型网站必须提供的功能了,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。 9、业务拆分 大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将真个网站业务拆分成...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19