用Python爬了一下我的微信好友,我开始怀疑人生了···

最近留意到Python语言中有一个非常好玩的库:itchat,基于web 微信的开放api做成的集成库,它:

是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。当然,该api的使用远不止一个机器人,更多的功能等着你来发现,比如实现微信自动回复,个人微信社交网络属性的数据分析。该接口与公众号接口itchatmp共享类似的操作方式,学习一次掌握两个工具。

目前此接口开源于GitHub,传送门在此。

本文简单的先容了基于itchat,运行一个简单的爬虫程序,来对我个人的朋友圈进行地毯式偷窥,并试图从我的朋友圈中挖出几个变态。

环境

本实验基于Python3.5,IDE工具PyCharm,并依赖以下库:

  • itchat,一套开源的微信号接口;
  • jieba, 分词工具,用于将抓取到的个人签名分词,方便做高频词统计;
  • wordcloud,词云工具,可以将高频词做成词云图形;
  • numpy,数据图表快速生成工具

以上库均可以通过pip方式快速安装,如:

pip install itchat

代码

首先先把核心代码放上来:

#导入itchat包
import itchat

#获取个人微信号好友信息
if __name__=="__main__":
    #登录个人微信,扫码登录
    itchat.login()
    #爬取自己好友相关信息
    friends=itchat.get_friends(update=False)[0:]
    #设置需要爬取的信息字段
    result=[('RemarkName','备注'),('NickName','微信昵称'),('Sex','性别'),('City','城市'),('Province','省份'),('ContactFlag','联系标识'),('UserName','用户名'),('SnsFlag','渠道标识'),('Signature','个性签名')]
    for user in friends:
        with open('myFriends.txt','a',encoding='utf8') as fh:
            fh.write("-----------------------\n")
        for r in result:
            with open('myFriends.txt','a',encoding='utf8') as fh:
                fh.write(r[1]+":"+str(user.get(r[0]))+"\n")
    print("完成")

以上是本次实验的核心模块,其作用是把个人微信号中的所有好友的昵称、备注、个性签名、性别、城市等等抓取下来,并存成txt文件。

在程序运行过程中,会弹出一个二维码,需要扫码登录你的微信号,然后就会开始爬去这个号的朋友圈;

在此基础上大家可以对这些数据动刀子了:

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__)
alice_coloring = np.array(Image.open(os.path.join(d, "wechat.jpg")))
my_wordcloud = WordCloud(background_color="white", max_words=2000,mask=alice_coloring,max_font_size=40, random_state=42,font_path='/Users/sebastian/Library/Fonts/Arial Unicode.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()
# 保存图片 并发送到手机
my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))
itchat.send_image("wechat_cloud.png", 'filehelper')

出来的效果图如下:


嗯。。。看到我的微信好友都这么正能量我就放心了····

其实基于这个接口大家可以统计到更多的数据,比如统计一下我微信里面的男女比例:

import itchat
itchat.login()
friends = itchat.get_friends(update=True)[0:]
# 初始化计数器,有男有女
male = female = other = 0
for i in friends[1:]:
    sex = i["Sex"]
    if sex == 1:
        male += 1
    elif sex == 2:
        female += 1
    else:
        other += 1
        total = len(friends[1:])

print (u"男:%.2f%%" % (float(male) / total * 100))
print (u"女:%.2f%%" % (float(female) / total * 100))
print (u"其他:%.2f%%" % (float(other) / total * 100))

最终打印出来的结果是:

男:45.23%
女:51.12%
其他:3.65%

我也不知道为什么我的微信里面妹子比较多···

但是我知道里面其实有很多大雕萌妹就对了····

更多玩法

大家可以设一些自动回复:

import itchat  
 
 
@itchat.msg_register(itchat.content.TEXT)  
def text_reply(msg):  
    message = msg['Text']  
    replay = u'Sir, 对方暂时无法进行交流'  
    if u'在干嘛' in message:  
        replay = u'sorry,你所联系的人正在思考人生不方便回你信息'  
    elif u'生气' in message:  
        replay = u'忙完给你买好吃的呐(づ ̄3 ̄)づ'  
    elif u'好吧' in message:  
        replay = u'乖~'  
    return replay  
  #以上是一些例子,可以依样多弄几个判断条件来实现更多很黄很暴力的聊天内容
  
itchat.auto_login()  
itchat.run() 

还可以看看我的好友都来自哪里:

#这里省略了扫码登录和将抓取到的数据存到本地文件的代码,如果忘记了,
可以查看上方代码示例

Province = df_friends.Province
Province_count = Province.value_counts()
Province_count = Province_count[Province_count.index!=''] 
#有一些好友地理信息为空,过滤掉这一部分人。

统计结果完成后,我发现我的好友大多来自广东(废话,我是广东人),上海和北京(我是用工作微信号做测试的,估计这部分好友都是客户爸爸2333)

然后来看看,我那些来自广东的好友们,都是哪个城市比较多:

City = df_friends.City #[(df_friends.Province=='广东')]
City_count = City.value_counts()
pinrt '主要来自这些城市:%s(%d)、%s(%d)、%s(%d)、%s(%d)、%s(%d)和%s(%d)。'[(City_count[0],City_count.index[1],City_count[1],City_count.index[2],City_count[2],City_count.index[3],City_count[3],City_count.index[4],City_count[4],City_count.index[5],City_count[5]))']

最终打印出来的结果显示,广东的好友们最多来自于:

  1. 广州:工作号加了一大堆广州的同事,很合理;
  2. 云浮:老家,很正常;
  3. 深圳:加了一堆深圳分部的同事,以及一些大学的同学?
  4. 佛山:??????
  5. 湛江:·····不想说话

怀疑人生,怀疑人生····

推荐阅读更多精彩内容