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

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

pip install itchat

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

import itchat

itchat.login()

#爬取自己好友相关信息, 返回一个json文件

friends = itchat.get_friends(update=True)[0:]

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

1. 自己微信好友的男女比例

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

#初始化计数器

male = female = other = 0

#friends[0]是自己的信息,所以要从friends[1]开始

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("男性好友: %.2f%%" % (float(male)/total*100) + "" +

"女性好友: %.2f%%" % (float(female) / total * 100) + "" +

"不明性别好友: %.2f%%" % (float(other) / total * 100))

打印的结果为:

男性好友: 37.65%

女性好友: 59.23%

不明性别好友: 3.12%

啊,一不小心就暴露了自己女性朋友比较多的事实。然而为什么我现在还是一只汪?!

好了,再把这个数据用R画成图看看(Python作图真的是忍不了,代码就不放了):

2. 自己微信好友的城市分布

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

#定义一个函数,用来爬取各个变量

def get_var(var):

variable = []

for i in friends:

value = i[var]

variable.append(value)

return variable

#调用函数得到各变量,并把数据存到csv文件中,保存到桌面

NickName = get_var("NickName")

Sex = get_var('Sex')

Province = get_var('Province')

City = get_var('City')

Signature = get_var('Signature')

from pandas import DataFrame

data = {'NickName': NickName, 'Sex': Sex, 'Province': Province,

'City': City, 'Signature': Signature}

frame = DataFrame(data)

frame.to_csv('data.csv', index=True)

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

City NickName Province Sex Signature

1 Alfred 男 一个专注挖矿的,煎得一手好牛排#stay focused.

2 马鞍山 月* 安徽 女 你太虚伪了

3 花地玛堂区 M*** 澳门 女 双子,天秤,白羊

4 嘉*** 女

5 广州 西* 广东 女

6 珠海 浪**** 广东 男 满目青山空念远,不如惜取眼前人。

# ... with *** more rows

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

看来我大部分的朋友都是在广东的(不是废话吗),其中广东的朋友大部分集中在广、深、珠,第二名是在奥克兰, 接着是四川、澳门等。灰色的NA值是指没有设置自己所在地的朋友,一共有70多人。另外,在国外的朋友由于微信的设置问题(很多是直接跳过省份,只有城市可以选择的),很多国外的城市被误当成了省份。

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

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

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

先把原先爬下来的个性签名(Signature)打印出来,发现有很多本来是表情的,变成了emoji、span、class等等这些无关紧要的词,需要先替换掉,另外,还有类似<>/= 之类的符号,也需要写个简单的正则替换掉,再把所有拼起来,得到text字串。

import re

siglist = []

for i in friends:

signature = i["Signature"].strip().replace("span","").replace("class","").replace("emoji","")

rep = re.compile("1fd+w*|[<>/=]")

signature = rep.sub("", signature)

siglist.append(signature)

text = "".join(siglist)

接着就可以把JB,啊不,把结巴分词这个包搞进来分词。

import jieba

wordlist = jieba.cut(text, cut_all=True)

word_space_split = " ".join(wordlist)

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

import matplotlib.pyplot as plt

from wordcloud import WordCloud, ImageColorGenerator

import numpy as np

import PIL.Image as Image

coloring = np.array(Image.open("/Users/apple/Desktop/wechat.jpg"))

my_wordcloud = WordCloud(background_color="white", max_words=2000,

mask=coloring, max_font_size=60, random_state=42, scale=2,

font_path="/Library/Fonts/Microsoft/SimHei.ttf").generate(word_space_split)

image_colors = ImageColorGenerator(coloring)

plt.imshow(my_wordcloud.recolor(color_func=image_colors))

plt.imshow(my_wordcloud)

plt.axis("off")

plt.show()

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

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

我本来提供的原图(经过处理的我的头像):

转载于:https://juejin.im/post/5bf1652ae51d457ad37345df

一件有趣的事:用Python爬了自己的微信朋友圈相关推荐

  1. python爬微信朋友圈怎么发文字_一件有趣的事:用Python爬了自己的微信朋友圈

    原标题:一件有趣的事:用Python爬了自己的微信朋友圈 最近几天干啥都不来劲,昨晚偶然了解到Python里的itchat包,它已经完成了wechat的个人账号API接口,使爬取个人微信信息更加方便. ...

  2. python爬取微信好友_如何用 Python 爬取自己的微信朋友

    原标题:如何用 Python 爬取自己的微信朋友 作者 Alfred 本文转载自网络,如涉及侵权请及时联系我们 微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天.分 ...

  3. python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  4. python抓取微信朋友圈动态_2018最全如何利用Python网络爬虫抓取微信朋友圈的动态...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  5. 2018最全如何利用Python网络爬虫抓取微信朋友圈的动态

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  6. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  7. python获取登录按钮_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...

  8. python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...

  9. python获取登录按钮_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈

    ​昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第 ...

最新文章

  1. 数据绑定以及Container.DataItem几种方式与用法分析 收藏
  2. android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究
  3. tensorboard ckpt pb 模型的输出节点_算法工程化系列——模型固化
  4. 查看Ubuntu系统的版本
  5. c语言遗传算法例子,C++遗传算法类文件实例分析
  6. 单片机跑马灯源代码+仿真
  7. IT行业技术部门人员架构设计
  8. vscode使用Setting Sync
  9. SQLite数据库中的.db-shm文件和.db-wal文件
  10. Backspace删除键不能够使用的解决办法
  11. [SPRD CAMERA] 5 HAL Camera open流程二
  12. andriod studio实现界面切换
  13. win7防火墙怎么关_win7系统防火墙开启失败怎么办【解决方法】
  14. 三种食物会让肿瘤疯长
  15. 外地人一年内直接落户上海
  16. 由SoC到SOPC、SoC FPGA ,异同优缺点的介绍及常见应用场景
  17. CSS(二)文字样式
  18. vue 使用人脸识别_使用Vue.js和Kairos构建简单的人脸识别应用
  19. 详解集中量数(各类平均数:平均数、几何平均数、调和平均数)
  20. 【东营seo诊断公司】SEO优化经验分享 如何成为一个合格的SEOer?

热门文章

  1. python平均工资-杭州Python开发平均工资高不高?
  2. 精通python设计模式-浅谈Python设计模式 - 原型模式
  3. python课程与c+课程有什么不同-Python学习之二:Python 与 C 区别
  4. python快速入门第三版-Python 快速入门:第3版 配套资源 PDF 完整版
  5. python程序实例教程基础-Python简单基础小程序的实例代码
  6. ViewFlipper的使用
  7. 题目1203:IP地址
  8. 题目1132:与7无关的数
  9. 【AMAD】splinter -- 用于测试web app的python框架
  10. ubuntu下zip文件操作