我用 Python 爬取微信好友,最后发现一个大秘密



640?wx_fmt=png&wxfrom=5&wx_lazy=1

前言

你身处的环境是什么样,你就会成为什么样的人。现在人们日常生活基本上离不开微信,但微信不单单是一个即时通讯软件,微信更像是虚拟的现实世界。你所处的朋友圈是怎么样,慢慢你的思想也会变的怎么样。最近在学习 itchat,然后就写了一个爬虫,爬取了我所有的微信好友的数据。并对其中的一些数据进行分析,发现了一些很有趣的事。

Python 微信好友爬虫

此次的爬虫程序用到的库有很多,其中爬取微信数据用到的是 itchat。需要你先去下安装。安装完成以后,你就可以通过 itchat.login() 这个函数登陆你自己的微信。它回弹出一个网页登陆的二维码,你用手机扫描登陆即可。

然后通过 itchat.get_friends() 这个函数就可以获取到自己好友的相关信息,这些信息是一个 json 数据返回。然后我们就可以根据这些返回的信息,进行正则匹配抓取我们想要的信息,在进行分析。

import itchat
itchat.login()
#爬取自己好友相关信息, 返回一个json文件
friends = itchat.get_friends(update=True)[0:]

0?wx_fmt=jpeg

观察返回的数据,很容易就可以根据关键字发现性别是存放在一个字典里面,它的 key 是「Sex」,男性值为 1,女性为 2,其他是不明性别的(就是没有填的)。

在代码里我定义了一个函数 parse_friends() 通过一个 for 循环,把获取到的数据通过 for 循环保存到 text 字典里。然后再通过 draw() 函数画出柱状图。柱状图使用的是 plt 库

def parse_friedns():
   itchat.login()
   text = dict()
   friedns = itchat.get_friends(update=True)[0:]
   print(friedns)
   male = "male"
   female = "female"
   other = "other"
   for i in friedns[1:]:
       sex = i['Sex']
       if sex == 1:
           text[male] = text.get(male, 0) + 1
       elif sex == 2:
           text[female] = text.get(female, 0) + 1
       else:
           text[other] = text.get(other, 0) + 1
   total = len(friedns[1:])
   print("男性好友: %.2f%%" % (float(text[male]) / total * 100) + "\n" +
         "女性好友: %.2f%%" % (float(text[female]) / total * 100) + "\n" +

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

def draw(datas):
   for key in datas.keys():
       plt.bar(key, datas[key])

   plt.legend()
   plt.xlabel('sex')
   plt.ylabel('rate')
   plt.title("Gender of Alfred's friends")
   plt.show()

最后打印的结果:

640?wx_fmt=png

不得不多说我微信的 1K 多的好友男女比列非常的不协调,男多女少啊。这让我回想起以前高中一个班 50 个人,女生就 7 个,然后我们班的女生从此就有一个女团称呼「七仙女」。

我的微信好友个性签名的词云图

为了进一步分析我的好友大致都有什么特征,我把好友的个性签名一起抓取,分析制作成词云。

个性签名是保存在 Signature 这个 key 中,由于有些签名包含些表情,最初抓取会变成 emoji、span、class 等等这些无关的词。所以需要先替换掉,另外,还有类似 <>/= 之类的符号,也需要写个简单的正则替换掉,再把所有拼起来,得到 text 字串。

   itchat.login()
   siglist = []
   friedns = itchat.get_friends(update=True)[1:]
   for i in friedns:
       signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")
       rep = re.compile("1f\d+\w*|[<>/=]")
       signature = rep.sub("", signature)
       siglist.append(signature)
   text = "".join(siglist)

得到的数据最后保存到当前目录名为「text.txt」文本中。

   text = "".join(siglist)
   with io.open('text.txt', 'a', encoding='utf-8') as f:
       wordlist = jieba.cut(text, cut_all=True)
       word_space_split = " ".join(wordlist)
       f.write(word_space_split)
       f.close()

分析好友签名的函数我定义成:parse_signature(),完整代码如下:

def parse_signature():
   itchat.login()
   siglist = []
   friedns = itchat.get_friends(update=True)[1:]
   for i in friedns:
       signature = i["Signature"].strip().replace("span", "").replace("class", "").replace("emoji", "")
       rep = re.compile("1f\d+\w*|[<>/=]")
       signature = rep.sub("", signature)
       siglist.append(signature)
   text = "".join(siglist)
   with io.open('text.txt', 'a', encoding='utf-8') as f:
       wordlist = jieba.cut(text, cut_all=True)
       word_space_split = " ".join(wordlist)
       f.write(word_space_split)
       f.close()

抓取整理了签名的数据,接下来就是制作出词云。这里使用的是 wordCloud 来进行词云的制作。

词云的制作我定义了一个:draw_signature() 函数,完整代码如下

def draw_signature():
   text = open(u'text.txt', encoding='utf-8').read()
   coloring = np.array(Image.open('3.png'))
   my_wordcloud = WordCloud(background_color="white", max_words=2000,
                        mask=coloring, max_font_size=60, random_state=42, scale=2,
                        font_path="DroidSansFallbackFull.ttf").generate(text)
   image_colors = ImageColorGenerator(coloring)
   plt.imshow(my_wordcloud.recolor(color_func=image_colors))
   plt.imshow(my_wordcloud)
   plt.axis("off")
   plt.show()

运行上面的代码后得到了如下的图,由于好友数量比较多,我分别找了两张图制作出图云。


640?wx_fmt=png


640?wx_fmt=png


努力,奋斗,世界,生活,自己。这些词在我们 1K 多人的好友中出现的最多。大家都非常的优秀,都非常的上进。我想这也正是我为什么每天都在努力学习的原因,环境真的非常的影响一个人。


640?wx_fmt=png


我的签名:人生必有痴,而有后成。现在的我痴迷于各种优秀的人,每天都在向他们学习。希望大家一生当中也有痴迷的一面。


完整的代码我已上传到 GitHub 上:


https://github.com/chihaiyishen/Python-Learning/tree/master/python%20%E7%88%AC%E8%99%AB/wechat



∞∞∞



640?wx_fmt=jpeg&wx_lazy=1

IT派 - {技术青年圈} 持续关注互联网、区块链、人工智能领域 640?wx_fmt=jpeg&wx_lazy=1



公众号回复“Python”

邀你加入{ IT派Python技术群 } 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253960.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

用 Python 分析了所有微信好友,发现了一个秘密...

点击上方“何俊林”&#xff0c;马上关注&#xff0c;每天早上8:50准时推送 真爱&#xff0c;请置顶或星标 Illustrations by Evgenij Kungur 文/ Python攻城狮 最近研究了一下itchat和matplotlib&#xff0c;目前实现了对微信好友头像、性别、区域、个性签名的采集及展示。 本…

chatgpt赋能python:Python中画笔放下:掌握Python图形编程

Python 中画笔放下&#xff1a;掌握 Python 图形编程 Python 是一种高级编程语言&#xff0c;广泛应用于数据处理、人工智能、Web 应用程序等领域。除了这些应用外&#xff0c;Python 还可以用于图形编程&#xff0c;包括绘制 2D 和 3D 图形、创建游戏和交互式应用程序等。在 …

使用Python处理PDF文件的简介与实践

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

影驰 H610M 光影 评测

影驰 H610M 光影 针对英特尔 12 代酷睿处理器设计&#xff0c;采用了 H610 芯片组&#xff0c;造型简洁&#xff0c;面向入门级用户推出。影驰 H610M 光影组装电脑怎么搭配更合适这些点很重要http://www.adiannao.cn/du 主板采用 M-ATX 版型&#xff0c;供电部分没有覆盖散热片…

影驰 H610M 光影主板 评测

影驰宣布 H610M 光影主板首发价格为 599 元。这款主板针对英特尔 12 代酷睿处理器设计&#xff0c;采用了 H610 芯片组&#xff0c;造型简洁&#xff0c;面向入门级用户推出。 主板采用 M-ATX 版型&#xff0c;供电部分没有覆盖散热片。产品提供两个内存插槽&#xff0c;支持 D…

影驰gtx960显卡怎么样_影驰gtx960 2g_影驰gtx960 2g跑分

刚到手的二手GTX960影驰虎将跑分 割版的GTX960 2G显卡&#xff0c;游戏性能只是和GTX960/1050相当。如果你只是用来玩网游戏和一般的单机游戏的话&#xff0c;倒是够用&#xff0c; 否则的话&#xff0c;建议购买二手的4G版的GTX960显卡&#xff0c;这样就可以在1080P下玩大多…

starram内存条怎么样_starram内存牌子_星存内存条

我的电脑是星存(StarRam)内存条,512 DDR400 可看网上说有散热片的是假的? 请问是这样的吗? 假的和真的性能差别大不大??前天加了条内存,是黑金刚521 DDR400的, 可是安电脑里就不对了,倒是比以前快了,可是IE总出错,下载东西用迅雷一直自动关闭,重装系统干脆连硬盘都找不到了…

Sequelize:Node.js 中的强大 ORM 框架

❤️砥砺前行&#xff0c;不负余光&#xff0c;永远在路上❤️ 目录 前言优势&#xff1a;提高效率&#xff0c;不用SQL即可完成数据库操作。 那什么是 Sequelize&#xff1f;主要特性&#xff1a;1、模型定义和映射&#xff1a;2、关联和联接&#xff1a;3、事务管理&#xff…

chatgpt赋能python:Python中提取指定元素——一个简单而精细的方法

Python中提取指定元素——一个简单而精细的方法 在网页抓取中&#xff0c;经常需要提取特定元素&#xff0c;例如标题、段落、图片等&#xff0c;以便于后续的数据处理与分析。而Python则是许多工程师在此领域中的首选语言&#xff0c;其灵活的语法和强大的第三方库给爬虫和数…

chatgpt赋能python:Python中用什么表示空格

Python中用什么表示空格 空格在编程中是一个非常重要的概念&#xff0c;特别是在Python中。Python是一门非常灵活的语言&#xff0c;空格是它语法的一个关键组成部分。今天我们将探讨的是Python中用什么表示空格。 空格是Python中的一个重要概念&#xff0c;它被用来表示代码…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

玻璃制品行业丨外贸业务管理难点及解决方案

玻璃作为一种重要的建筑材料&#xff0c;在国际贸易中一直占有一定的份额。随着国外市场需求量的不断增加&#xff0c;对玻璃制品的技术含量要求越来越高&#xff0c;需要在研发方面的投入也逐步加大。由于国际市场竞争激烈&#xff0c;想要做玻璃制品行业的外贸公司&#xff0…

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架&#xff0c;它支持多种编程语言和浏览器&#xff0c;并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程&#xff0c;包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

华为网络设备查询系统时间及修改系统时间命令

查看当前系统时间 dis time all 手动修改系统时间clock datetime 14:25:00 2020-6-19

华为计算产品备件查询助手

华为计算产品备件查询助手 https://support-it.huawei.com/server-spareparts/#/spareparts

华为设备历史200条命令查询方法

有时配置误操作后又执行了很多新命令&#xff0c;需要复查或纠正时无法通过上下键直接翻到之前配置的命令&#xff0c;此时可以使用display history-command all-users 查询最近200条配置的命令&#xff0c;如下图所示&#xff1a;

Windows 查看是否激活

打开cmd 输入【slmgr.vbs /xpr】后按【回车键】 弹出如下对话框表示激活成功

如何查看电脑激活状态

** 如何查看电脑激活状态 ** 1 按下“winr”输入“slmgr.vbs -xpr” 2 点击“确定”。

查询office激活所剩时间

1.找到office安装的根目录 我的路径是C:\Program Files\Microsoft Office\Office16 2、在命令行输入cd C:\Program Files\Microsoft Office\Office16&#xff0c;回车 3、输入cscript ospp.vbs /dstatus&#xff0c;回车 这个时间就是激活剩余时间

华为官方解锁码申请

2019独角兽企业重金招聘Python工程师标准>>> 相关说明 • 本教程为华为解锁码申请教程&#xff0c;获取的解锁码用于刷机精灵刷机时弹出的解锁对话框里&#xff1b; 申请解锁码 • 点击进入 解锁页面 • 根据提示进行登录&#xff0c;没有帐号的请先进行注册&#x…