用 Python 爬了爬自己的微信朋友(实例讲解)


Posted in Python onAugust 25, 2017

最近几天干啥都不来劲,昨晚偶然了解到 Python 里的 itchat 包,它已经完成了 wechat 的个人账号 API 接口,使爬取个人微信信息更加方便。鉴于自己很早之前就想知道诸如自己微信好友性别比例都来自哪个城市之类的问题,于是乎玩心一起,打算爬一下自己的微信。

用 Python 爬了爬自己的微信朋友(实例讲解)

作者:Alfred

首先,在终端安装一下 itchat 包。

用 Python 爬了爬自己的微信朋友(实例讲解)安装完成后导入包,再登陆自己的微信。过程中会生产一个登陆二维码,扫码之后即可登陆。登陆成功后,把自己好友的相关信息爬下来。

用 Python 爬了爬自己的微信朋友(实例讲解)

有了上面的 friends 数据,我们就可以来做分析啦。

自己微信好友的男女比例

仔细观察了一下返回的数据结构,发现”性别“是存放在一个字典里面的,key 是”Sex“,男性值为 1,女性为 2,其他是不明性别的(就是没有填的)。可以写个循环获取想要的性别数据,得到自己微信好友的性别比例。

用 Python 爬了爬自己的微信朋友(实例讲解)

打印的结果为:

男性好友:37.65%

女性好友:59.23%

不明性别好友:3.12%

啊,一不小心就暴露了自己女性朋友比较多的事实。然而为什么我现在还是一只汪?!好了,再把这个数据用R画成图看看(Python 作图真的是忍不了,代码就不放了):

用 Python 爬了爬自己的微信朋友(实例讲解)

自己微信好友的城市分布

再仔细观察 friends 列表,发现里面还包含了好友昵称、省份、城市、个人简介等等的数据,刚好可以用来分析好友城市分布,最好的方式是定义一个函数把数据都爬下来,存到数据框里,再进行分析。

用 Python 爬了爬自己的微信朋友(实例讲解)

以上便得到一个叫 data 的 csv 桌面文件, 用 R 打开并简单做一下数据预处理,得到如下(涉及隐私的已被预处理):

用 Python 爬了爬自己的微信朋友(实例讲解)

接着先根据省份、城市进行数据的分组和聚合,选择排名前二十的,利用 ggplot2 包画出如下的城市分布图(代码太长,不放了,就是这么任性,有需要参考的直接向我拿):

用 Python 爬了爬自己的微信朋友(实例讲解)

看来我大部分的朋友都是在广东的(不是废话吗),其中广东的朋友大部分集中在广、深、珠,第二名是在奥克兰, 接着是四川、澳门等。灰色的 NA 值是指没有设置自己所在地的朋友,一共有 70 多人。

另外,在国外的朋友由于微信的设置问题(很多是直接跳过省份,只有城市可以选择的),很多国外的城市被误当成了省份。

再来一张图看看自己微信朋友在广东的具体分布(取前八):

用 Python 爬了爬自己的微信朋友(实例讲解)

自己微信好友个性签名的自定义词云图

好玩的来了。之前已经爬下了每个好友的个性签名,刚好可以分析一下大伙儿个性签名时使用的高频词语是什么,顺便可以做个词云图。

先把原先爬下来的个性签名(Signature)打印出来,发现有很多本来是表情的,变成了 emoji、span、class 等等这些无关紧要的词,需要先替换掉,另外,还有类似<>/= 之类的符号,也需要写个简单的正则替换掉,再把所有拼起来,得到 text 字串。
用 Python 爬了爬自己的微信朋友(实例讲解)接着就可以把 JB,啊不,把结巴分词这个包搞进来分词。

用 Python 爬了爬自己的微信朋友(实例讲解)

终于可以进入画图阶段了。可以根据自己想要的图片、形状、颜色画出相似的图形(在这里,我使用的是我的头像,当然,为了颜色可以更加鲜艳使最后画出的词云图更加好看易辨,我先对自己的头像用 PS 做了一点小处理)。为此,我们需要把 matplotlib、wordcloud、numpy、PIL 等包搞进来。

用 Python 爬了爬自己的微信朋友(实例讲解)

运行上面的代码,得到下面的图:

用 Python 爬了爬自己的微信朋友(实例讲解)

看来,在我的微信好友的个人签名里,有人善于聆听,有人强调善良,有人重视灵魂,有人凝视人生。一直在等待,不放弃寻找。历尽曲折,不畏虚伪。真心如一,不能辜负。一步一生多努力,一起一切 one more dream(真编不下去了)。

最后

以上是不是很有趣呢?是不是又打开了一扇新世界的大门呢?

我微信好友也不是太多,如果微信好友有几千个,可以得到几千条数据,分析一下还是很有价值的。

当然,itchat 包还有很多其他的功能还有待发掘,包括自动回复微信信息、自动添加好友、管理微信群等,有时间再慢慢摸索吧。

这篇用 Python 爬了爬自己的微信朋友(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的文本处理
Apr 11 Python
Python在线运行代码助手
Jul 15 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
django-allauth入门学习和使用详解
Jul 03 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
基于pandas中expand的作用详解
Dec 17 Python
详解Python中的Lock和Rlock
Jan 26 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
详解python基础之while循环及if判断
Aug 24 #Python
用Python实现随机森林算法的示例
Aug 24 #Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 #Python
python 接口_从协议到抽象基类详解
Aug 24 #Python
Python调用ctypes使用C函数printf的方法
Aug 23 #Python
使用Python实现博客上进行自动翻页
Aug 23 #Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 #Python
You might like
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php目录操作实例代码
2014/02/21 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
Java的类与C++的类有什么不同
2014/01/18 面试题
网络程序员自荐信
2014/01/25 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server