继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python使用itchat获取微信好友

冉冉说
关注TA
已关注
手记 338
粉丝 43
获赞 194

最近发现了一个好玩的包itchat,通过调用微信网页版的接口实现收发消息,获取好友信息等一些功能,各位可以移步itchat项目介绍查看详细信息。

目标:

  • 获取好友列表

  • 统计性别及城市分布

  • 根据好友签名生成词云

获取好友信息

  • 前文说了,itchat其实是调用微信网页版的接口,所以登陆的时候会弹出二维码进行登陆,然后通过itchat.get_friends获取好友信息就好了,相当简单。

# -*- coding: utf-8 -*-import itchatimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltimport warningsimport jiebaimport refrom 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位,效果如下:


    https://img1.mukewang.com/5d5388e30001d33708010629.jpg

性别分布

  • 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()
  • 效果如下:


    https://img1.mukewang.com/5d5388e7000131da07800468.jpg

根据好友签名绘制词云

  • 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 +xxxdef 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!'
  • 使用背景图片


    https://img4.mukewang.com/5d5388eb0001c0e506090686.jpg

  • 效果如下:


    https://img1.mukewang.com/5d5388f000012bf906130693.jpg


peace~



作者:Awesome_Tang
链接:https://www.jianshu.com/p/4ab4fe8ac4ce

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP