用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. 湛江:·····不想说话

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容