用 Python 分析微信群聊记录,是怎样一种体验?

微信群聊记录分析新思路:除了监控,我们还能用Python和MySQL做什么? 本文探讨了如何利用Python和MySQL对微信群聊记录进行深度分析,从数据预处理到商业洞察的完整链路。通过SQL查询技巧和高级文本分析,实现用户行为建模、情感趋势预测等应用,为社区运营和产品决策提供数据支持。特别适合数据分析师和运营人员提升微信群消息监控系统的价值挖掘能力。 阅读详情

1. 场景

前几天,有一位小伙伴在后台给我留言,说自己有几十个微信群,自己精力有限,没法看过来,想要筛选一些高质量的群,让我是否能帮忙想想办法。

其实,微信群里的所有聊天记录都在手机本地文件夹内,只需要导出来进行解密,然后来一波数据分析,就可以帮他筛选出高质量的社群。

本篇文章将带大家用 Python 一步步来实现这个功能。

2. 实现步骤

第 1 步,导出微信聊天记录数据库

首先,我们使用一部 Root 后的手机或者模拟器登录微信,找到微信聊天记录数据库,然后导出到本地。

数据库文件的完整路径如下:

# 微信聊天记录数据库完整路径
/data/data/com.tencent.mm/MicroMsg/[当前登录微信的随机字符串]/EnMicroMsg.db

需要注意的是,如果当前设备没有 Root,可以选择群聊消息进行一次迁移,然后从 Root 设备或模拟器中导出数据库。

第 2 步,获取数据库的密码

微信数据库的密码组成形式为:手机 IMEI + 微信 UIN,然后 md5 加密(32 位小写)的前 7 个数字。

其中,手机的 IMEI 可以通过 *#06# 获取,如果是双卡手机,需要自己做一下判断。

微信的 UIN 在下面配置文件中,找到 name 属性为 default_uin 的 value 值,即为 UIN

# 当前登录微信的配置文件
/data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml

最后,然后将 IMET 和 UIN 组成字符串,然后利用 MD5 进行加密,取 32 位小写的前 7 位即为微信数据库的密码。

第 3 步,破解数据库

由于微信数据库是使用 SQLCipher 生成,所以要先安装 sqlcipher 命令行文件

# 安装sqlcipher命令行(Mac)
brew install sqlcipher

# Win可以去下载sqlcipher命令行文件

然后,输入数据库的密码及解密方式等,导出破解后的数据库。

第 4 步,分析数据库

推荐使用 SQLiteSutdio 打开并分析上面破解后的数据库,重点查看 message、rcontact、chatroom 这 3 张表。

微信所有的文字聊天记录都存放在 mesage 数据表中,包含:聊天内容、发送者、消息类型、创建时间等

rcontact 为微信通讯录表,包含:微信 ID、昵称、备注名等

chatroom 是群聊信息表,包含:群聊 ID、成员列表等

第 5 步,Python 打开数据库并封装

使用 sqlite3 连接本地数据库文件,获取数据库对象和游标对象

import sqlite3

def __init__(self, db_path="./weixin.db"):
    """
    本地数据库初始化
    """
    self.db = sqlite3.connect(db_path)
    self.cursor = self.db.cursor()

接着,对数据库常用的操作,包含:增删改查,进行封装操作。

def execute(self, sql, param=None):
    """
    sql: Sql语句,包含:增、删、改
    param:数据,可以为列表、字典,也可以为空
    """
    try:
        if param is None:
            self.cursor.execute(sql)
        else:
            if type(param) is list:
                self.cursor.executemany(sql, param)
            else:
                self.cursor.execute(sql, param)
            count = self.db.total_changes
            self.db.commit()
    except Exception as e:
        print(e)
        return False, e

    # 返回结果
    return True if count > 0 else False

def query(self, sql, param=None):
    """
    查询语句
    sql:Sql语句
    param:参数,可以包含空
    retutn:成功返回True
    """
    if param is None:
        self.cursor.execute(sql)
    else:
        self.cursor.execute(sql, param)

    # 返回查询的结果
    return self.cursor.fetchall()

第 6 步,通过群聊名称获取群聊 ID

根据群聊昵称,使用 Sql 语句查询 rcontact 表,可以获取群聊的 ID 值

def __get_chartroom_id(self):
    """
    获取群聊的id
    :return:
    """
    res = self.db.query('select username from rcontact where nickname=?;', (self.chatroom_name,))

    # 群聊id
    chatroom_id = res[0][0]

    return chatroom_id

第 7 步,获取群聊消息

拥有群聊 ID 之后,紧接着查询 message 表,获取当前群聊的所有消息内容。

# message表:聊天记录表
# isSend=0:对方发送的;isSend=1:自己发送的
sql = "SELECT content FROM message WHERE talker='{}' and isSend=0".format(chatroom_id)

# 查询表,获取所有的聊天记录
result = self.db.query(sql)

为了获取有效的消息内容,可以清洗掉自己发送的消息、系统消息、红包消息等内容

# 循环查询到的所有的消息
for item in result:
    # 过滤数据
    if not item or not item[0] or item[0].find('xml') != -1 or item[0].find('sysmsg') != -1 or item[0].find(
                    '<msg>') != -1 or item[0].find('chatroom') != -1 or item[0].find('weixinhongbao') != -1:
         continue
    # 过滤掉自己发送的内容,不包含:
    temps = item[0].split(':')
    if len(temps) < 2:
        # print('自己发送的内容:' + item[0])
        continue
    # 每一条聊天记录,过滤掉发送者,只保留消息正文
    # 发送者
    send_from = item[0].split(':')[0]

    # 发送内容
    send_msg = "".join(item[0].split(':')[1:]).strip().replace("\"", "")
    # 过长的消息,也过滤掉
    if len(send_msg) > 200:
         continue

对于群其他成员发送的内容,再过滤掉消息内容的前半部分,只保留消息正文

第 8 步,生成词云

使用 jieba 对群内有效的消息进行分词,然后使用 wordcloud 生成词云图。

def generate_wordcloud(self, word):
    """
    生成词云
    :param word:
    :return:
    """

    img = WordCloud(font_path="./DroidSansFallbackFull.ttf", width=2000, height=2000,
                        margin=2, collocations=False).generate(word)
    plt.imshow(img)
    plt.axis("off")
    plt.show()

    # 保存图片
    img.to_file("{}.png".format("群聊"))

# 分词
temp = " ".join(jieba.cut(words, cut_all=True))

# 生成词云
generate_wordcloud(temp)

第 9 步,新建排名表,插入数据

为了统计群聊活跃度排名,我们需要新建一张表,包含:id、微信昵称、消息内容 3 个字段。

def __create_top_table(self):
   """
   创建Top表
   :return:
   """
   # 创建Top表,如果存在就不重新创建
   result = self.db.execute(
            "CREATE TABLE IF NOT EXISTS top(uid integer primary key,name varchar(200),msg varchar(200))")

接着,将上一步的每一条消息中的发送者 ID、发送内容 2 个字段插入到新建的 Top 表内

# 定义一个列表,加入所有要统计的数据
msg_pre = []

for item in result:
    # 发送者
    send_from = item[0].split(':')[0]
    # 发送内容
    send_msg = "".join(item[0].split(':')[1:]).strip().replace("\"", "")
    msg_pre.append((send_from, send_msg))

 # 把要统计的数据,插入到top表中
 self.db.execute("insert into top(uid,name,msg) values (NULL,?,?);", msg_pre)

第 10 步,获取活跃度排名并可视化

从 Top 数据表中,通过微信昵称查询出每一位成员发言的次数,并保存到一个列表中

def get_top_partner(self):
    """
    排名前15的成员
    :return:
    """
    sql = "SELECT name as 姓名,COUNT(*) as times FROM top GROUP BY name ORDER BY times DESC limit %d;" % self.top_num
    result = self.db.query(sql)

    for item in result:
        # 用户id
        id = item[0]
        # 发言次数
        count = item[1]

        # 获取用户的昵称,即:微信昵称
        username = self.get_username(id)

        self.top_data.append({
            'username': username,
            'count': count
            })

最后,去除微信昵称的特殊符号,使用 pyecharts 将数据可视化。

def draw_image(self):
    """
    数据可视化
    :return:
    """
    usernames = []
    counts = []
    for user in self.top_data:
         # 去除昵称中的特殊符号
         usernames.append(get_ava_string(user.get('username').strip())[0:8])
         counts.append(user.get('count'))

    def bar_chart() -> Bar:
            c = (
                Bar()
                    .add_xaxis(usernames)
                    .add_yaxis("活跃度", counts)
                    .reversal_axis()
                    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
                    .set_global_opts(title_opts=opts.TitleOpts(title="最活跃的%d个小伙伴" % self.top_num))
            )
            return c

    # 需要安装 snapshot-selenium 或者 snapshot-phantomjs
    make_snapshot(driver, bar_chart().render(), "bar.png")

3. 最后

上面的操作,通过生成的词云了解到当前群聊过去一段时间都在聊的话题及价值,通过对聊天记录的数据分析,获取到微信群聊活跃度排名。

当然,也可以分析群成员潜水排名及某一位群成员的数据分析。

我已经将全部源码上传到后台,关注公众号后回复「 微信群聊 」即可获得全部源码。


● 80%的人都不知道,全球Python库下载前10名

● 我珍藏的一些好的Python代码,技巧|上篇

● 爬取300本Python书籍,用Python告诉你哪家强?

● 简单几步,100行代码用Python画一个蝙蝠侠的logo

● 我用Python分析了《青春有你2》109位漂亮小姐姐,真香!

点击阅读原文,原创400篇干货文章

chatgpt赋能python:Python如何给微信群发消息? 本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。 阅读详情

相关推荐

chatgpt赋能python:Python如何获取微信聊天记录

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

www_xuhss_com的博客 6681

chatgpt赋能python:Python微信获取群聊信息:顶级互联的新标准

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

yakuchrisfor的博客 2196

用 Python 分析前任的微信群聊记录,是怎样一种体验?

1. 场景 前几天,有一位小伙伴在后台给我留言,说自己有几十个微信群,自己精力有限,没法看过来,想要筛选一些高质量的群,让我是否能帮忙想想办法。 其实,微信群里的所有聊天记录都在手机本地文件夹内,只需要导出来进行解密,然后来一波数据分析,就可以帮他筛选出高质量的社群。 本篇文章将带大家用 Python 一步步来实现这个功能。 2. 实现步骤 第 1 步,导出微信聊天记录数据库 首先,我们使用一部 Root 后的手机或者模拟器登录微信,找到微信聊天记录数据库,然后导出到本地。 数据库文件的完整路径如下: #.

Java_cola的博客 712

用python写一篇群发微信消息的工具

此外,如果你有大量联系人,可能会遇到微信的限制,需要考虑如何分批或定时发送消息。然后,在我们的消息处理器函数中,我们检查当前收到的消息是否来自这些目标用户之一,如果是的话,我们就回复一条消息。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

qq_41314882的博客 4495

用Python机器人监听微信群聊

随着微信社交的兴起,我们加入的群也越来越多,一个不经意就被拉入好几个群,群是大家协同交流的平台,但是微信群却越来越泛滥,不知道大家有没有统计过自己浪费在毫无营养的群中的时间? 因为群质量太低或者群太吵的原因我们往往会将群设置为勿扰模式,而这样又有可能会错过一些自己比较关注的人发的消息,比如女神、老板、和产品狗。。。 为了解决这个痛点,今天带大家一起来看看如何用Python开...

weixin_45084321的博客 5477

微信群画像,利用词云图分析微信群热点

微信上有很多个群,不少群都是做了免打扰设置,但有的时候又想知道群里在讨论什么热点问题。利用词云图分析是一个了解某个微信群热点的方法。 本文通过itchat 采集微信群聊记录,用jieba做分词,用wordcloud生成词云图,主界面用wxPython完成。分析结果如下图: 对隐私内容马赛克处理了。 一、准备工作 首选,先要确定你的微信能登录微信网页版。只有能成功...

预则立 3430

python监听文件更改记录_用Python机器人监听微信群聊

随着微信社交的兴起,我们加入的群也越来越多,一个不经意就被拉入好几个群,群是大家协同交流的平台,但是微信群却越来越泛滥,不知道大家有没有统计过自己浪费在毫无营养的群中的时间?因为群质量太低或者群太吵的原因我们往往会将群设置为勿扰模式,而这样又有可能会错过一些自己比较关注的人发的消息,比如女神、老板、和产品狗。。。为了解决这个痛点,今天带大家一起来看看如何用Python开发一个可以监听微信群聊的机器...

weixin_30325929的博客 278

微信群聊记录自动化清洗与AI摘要生成全流程实践

微信群聊常因信息密度低、上下文碎片化而让人陷入“爬楼”困境。AI摘要生成技术能够有效解决这一痛点,其核心原理是利用大语言模型对消息进行语义理解与结构化提炼。在工程实践中,文本清洗和提示词工程是影响摘要质量的关键,通过去噪过滤、话题分段和模板化输出,能让模型精准识别结论、待办与风险。该技术广泛适用于工作协作、项目管理等高频沟通场景,大幅提升信息检索与决策效率。本文分享了一套从导出记录、本地解析清洗,到调用大模型API生成结构化摘要的完整方案,并针对超长文本、token超限及隐私安全等实际问题给出了可落地的解决

weixin_34392435的博客 338

用Python机器人监听微信群聊 !

随着微信社交的兴起,我们加入的群也越来越多,一个不经意就被拉入好几个群,群是大家协同交流的平台,但是微信群却越来越泛滥,不知道大家有没有统计过自己浪费在毫无营养的群中的时间? Python学习交流群:1004391443 因为群质量太低或者群太吵的原因我们往往会将群设置为勿扰模式,而这样又有可能会错过一些自己比较关注的人发的消息,比如女神、老板、和产品狗。。。 为...

Pythoncxy的博客 3190

使用Python爬取微信群里的百度云资源

需求背景: 最近误入一个免费(daoban)资源的分享群(正经脸),群里每天都在刷资源链接。但是大家都知道,百度云的分享链接是很容易被河蟹的,群里除了分享链接外,就是各种抱怨 “怎么又失效了”,“又河蟹了…”。本着学习技术的初心,于是我就开始研究怎样自动爬取微信群的消息并自动转存到自己的云盘。 需求: (1),爬取微信群里的百度云分享链接 (2),将资源转存到自己的网盘 涉及 (1),正则表达式 (2),如何分析cookie和api (3),selenium(webdriver) 本篇文章目录 (1),爬

pythonxiaopeng的博客 3132

【一文搞懂几种常用推荐算法】

协同过滤:适合用户-物品交互数据丰富的场景。矩阵分解:能处理稀疏数据,适合显式评分预测。基于内容:依赖物品特征,解决冷启动问题。NMF:适用于非负数据(如点击率、购买记录)。根据实际需求选择算法,或结合多种方法构建混合推荐系统。

专注技术的博主 2642

chatgpt赋能python:Python获取微信群内聊天信息

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

a1sssssb的博客 2945

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

一旦结果与预测差距较大,可能存在光伏系统的问题,需要找出原因,然后采取适当措施来修复光伏系统并做出更好的决策。例如,根据准确的预测,光伏系统运营商可以平衡电力消耗,并将多余的电力储备用于紧急情况。然而,光伏系统的发电量估算是一个挑战,因为光伏系统的发电量受到天气条件的极大影响。整个项目文件夹(第一个文件夹为xgboost模型相关的包文件,xg.py是xgboost模型英文注释版本,xg_chinese.py是xgboost模型中文注释版本)表示空气的温度,通常以摄氏度(°C)或华氏度(°F)为单位。

2301_79699110的博客 3034

手把手教你用Python分析微信群聊:谁是话痨?几点最活跃?(含避坑指南)

本文详细介绍了如何使用Python分析微信群聊数据,包括成员活跃度、时间模式和内容分析,帮助社群运营者量化社交行为并优化运营策略。通过实战案例展示了如何识别话痨成员、把握活跃时段,并提供避坑指南解决常见问题。

weixin_30561177的博客 458

振动信号相位测量的关键技术解析

本文深入解析了振动信号相位测量的关键技术,强调相位是振动信号的“身份证”,对于动平衡和故障诊断至关重要。文章详细阐述了键相传感器与振动传感器的选型、安装要点,以及时域和频域(FFT)核心算法,并针对现场噪声、转速波动等挑战提供了实战解决方案,帮助工程师实现精准、稳定的相位测量。

vv45678的博客 839

Verilog的综合指令

Synopsys综合指令

烟花一时的博客 5447

利用python分析微信聊天记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、任务分析二、使用步骤1.引入库2.读入数据总结 前言 昨天跟女朋友讨论谁给对方发的消息比较多,两人各执一词,哼哼,我现在就来统计下咱俩谁发的消息比较多! 一、任务分析 统计微信聊天记录大致分为三步——数据获取、数据清洗和数据分析。下面 其中最难的就是数据获取。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.

Kevinxgl的博客 2万+

水文预报新手别怕!用Matlab 18小时搞定马斯京根法参数K和x(附完整代码)

本文详细介绍了如何使用Matlab在18小时内快速掌握水文预报中的马斯京根法参数K和x的求解方法。通过完整的代码示例和分步解析,帮助新手从理论到实践快速跨越,解决传统手工试算耗时耗力的问题,提升水文预报的效率和精度。

weixin_42573113的博客 259

使用python获取群聊信息并分析群聊成员

在之前用python的itchat玩了一波微信好友以后,最近突然想继续玩一下微信群聊。说做就做,就以公司的微信群来一波操作吧。 代码主要实现的功能主要是,获取微信群聊,获取群聊中的用户信息,以及根据这些信息制作的柱状图,饼图和词云。 代码在最后。先来看一波结果,首先是单位微信群的性别统计图(忽视我的视觉审美): 这未知是个什么鬼啊。。。好吧,因为性别代号1为男,2为女,最后发现还有0存在...

一个喜欢吃鸡的程序猿 8160

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2255

179、运动控制中的行业标准:机器人安全标准ISO 10218

今天这篇笔记,就把我踩过的坑和标准里的硬骨头掰开揉碎讲清楚。

m0_50546716的博客 170

Python爬取并闪存微信群里的百度云资源_百度云资源连接微信群(1)

yunData.PATH 只指向了一个路径信息,完整的 filelist 可以从 yunData.FILEINFO 里提取,它是一个 json ,list 里的信息是Unicode编码的,所以在控制台看不到中文,用Python代码访问并获取输出一下就可以了。以上面这个资源链接为例(随时可能被河蟹,但是没关系,其他链接的结构也是一样的),我们先用浏览器手动访问,F12 打开控制台先分析一下源码,看看我们要的资源信息在什么地方。点击它,再点击右边的【Cookies】就可以看到请求头里的 cookie 情况。

a19815156的博客 928

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+
上一篇: Pandas进阶修炼,先来20道题热身再说!
下一篇: 在拼多多上班,是一种什么样的体验?我tm心态崩了呀!
菜鸟学Python
博客等级 码龄9年 8089粉丝 571原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值