百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

用python分析你的朋友圈,很好玩~

csdh11 2025-03-13 14:18 14 浏览

设计喵的内心OS:我一脸懵逼点进来,一脸懵逼走出去,你说了什么?

事情是这么来的,我看到有朋友在做朋友圈的电子书,也想自己研究一下,发现原来有个itchart这个微信第三方API可以读取微信数据,抱着好奇的想法尝试了以下,果然非常好玩。

程序结构:

getFriendsList.py这个类用来爬取好友信息并保存到指定文件

import itchat
import os
import time

basepath = os.path.dirname(os.path.realpath(__file__))
download_path = basepath+'/downloads'+ '/'

# 调用itchat接口登录并拉取数据
itchat.login
friends = itchat.get_friends(update=True)[0:]

fmt='%Y%m%d%H%M%S' #定义时间显示格式
Date=time.strftime(fmt,time.localtime(time.time))

download_file_name = 'friendsList_'+friends[0]['NickName']
+ '_' + Date + '.txt'

f = open(download_path+download_file_name,'wb')
print(download_path+download_file_name)

for i in friends[1:]:
friend = (str(i) + "\n").encode(encoding='gb18030')
# print(str(i))
f.write(friend)

f.close

analyse.py这个类根据下载的好友数据分析好友信息

import re
import os
import time

source_file = "friendslist_阿西UED_20180105191247.txt"

basepath = os.path.dirname(os.path.realpath(__file__))
download_file = basepath+'/downloads/'+ source_file

fs_str = ''
with open(download_file,'rb') as f:
fs_str = f.read.decode('gb18030')

friends = fs_str.split('\n')

# 初始化计数器
male = female = other = 0
# 所有省份
Provinces_list =
#friends[0]是自己的信息,所以要从friends[1]开始
for i in friends:
if i.__len__>0:
i = i.replace('<ContactList: [','"<ContactList: [')
i = i.replace(']>',']>"')
friend = eval(i)

# 统计性别
sex = friend["Sex"]
if sex == 1:
male += 1
exit
elif sex ==2:
female += 1
else:
other+=1

# 统计地区
Province = friend["Province"]
Provinces_list.append(Province)


#计算朋友总数
total = len(friends)
#打印出自己的好友性别比例
print("总好友数: %d" % total + "\n" +
"男性好友: %d 个,占比 %.2f%%" % (male,(float(male)
/total*100)) + "\n" +
"女性好友: %d 个,占比 %.2f%%" % (female,(float
(female) / total * 100)) + "\n" +
"不明性别好友: %d 个,占比 %.2f%%" % (other,
(float(other) / total * 100)))

Provinces_set = set(Provinces_list)
Provinces_dict = {}
for i in Provinces_set:
Provinces_dict[i] = Provinces_list.count(i)
# 对省份字典按value排序
Provinces_dict = sorted(Provinces_dict.items,
key=lambda asd:asd[1],reverse=True)

print("==========人数排名前10地区如下============")
top = 0
for k,v in Provinces_dict:
if top<10:
print("%s : %d 个,占比 : %.2f%%" %
(k,v,float(v)/total*100))
top+=1

输出结果:

总好友数: 1324

男性好友: 680 个,占比 51.36%

女性好友: 592 个,占比 44.71%

不明性别好友: 51 个,占比 3.85%

=======人数排名前10地区如下========

未知 : 258 个,占比 : 19.49%

北京 : 211 个,占比 : 15.94%

上海 : 198 个,占比 : 14.95%

广东 : 173 个,占比 : 13.07%

河南 : 68 个,占比 : 5.14%

浙江 : 63 个,占比 : 4.76%

江苏 : 51 个,占比 : 3.85%

四川 : 24 个,占比 : 1.81%

山东 : 21 个,占比 : 1.59%

河北 : 19 个,占比 : 1.44%

wordCloud.py根据签名生成词云

词云来自全部好友的签名,把签名收集在一起拼接字符串然后分词再拼成一张图片。重复越多的字越大。

# -*- coding:UTF-8 -*-
import re
import os
import time

base_pic = "alice_coloring.jpg"
source_file = "friendsList_阿西UED_20180105191247.txt"

basepath = os.path.dirname(os.path.realpath(__file__))
download_file = basepath+'/downloads/'+ source_file

fs_str = ''
with open(download_file,'rb') as f:
fs_str = f.read.decode('gb18030')

friends = fs_str.split('\n')


siglist =
for i in friends:
if i.__len__>0:
i = i.replace('<ContactList: [','"
<ContactList: [')
i = i.replace(']>',']>"')
friend = eval(i)
# print(friend)
# print(friend["Signature"])
signature = friend["Signature"].strip
.replace("span","").replace("class","")
.replace("emoji","")
rep = re.compile("1f\d+\w*|[<>/=]")
signature = rep.sub("",signature)
siglist.append(signature)
text = "".join(siglist)

import jieba
wordlist = jieba.cut(text,cut_all=True)
word_space_split = " ".join(wordlist).replace("\n","")

print(word_space_split)



import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL.Image as Image

coloring = np.array(Image.open(base_pic))
my_wordcloud = WordCloud(background_color="white",
max_words=2000,mask=coloring,max_font_size=60,
random_state=42,scale=2,
font_path="fonts/STHeiti Light.ttc")
.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

词云的效果:

python还有其他比较好玩的东西,比如小程序辅助就是python开发的我经过测试已经被官方黑名单了,,不过用来自娱自乐很奈斯。

还能分析你朋友圈全部的内容,图片、文字哪些做微信电子书就是用这个原理做的爬虫。

原文链接是我用js实现的微信跳转支付宝demo有兴趣的可以体验一下,明天文章发教程。

感觉要转行做开发了的感觉~

相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...