通过微信聊天记录生成词云

对于微信聊天记录,可以通过采集聊天记录,通过聊天数据生成词云两步实现

一、聊天记录数据采集

整个任务中最困难的即为聊天数据采集。由于QQ和微信的聊天记录提取难度不同,对于QQ聊天数据,简单的导出即可。对于微信聊天数据,微信将聊天数据保存在EnMicroMsg.db数据库中,通过MD5加密,所以我们通过获取db数据库中的文件,再对数据解密即可成功获取和某人的聊天记录啦。下面开始正式介绍如何采集聊天数据。

工具

  • 蓝叠模拟器(通过将微信数据由手机导入到电脑, 再将数据从电脑导入蓝叠模拟器)
  • sqlcipher.exe

1.数据由手机导入到模拟器中

蓝叠安卓模拟器官网

通过微信聊天记录生成词云_第1张图片

蓝叠模拟器图标如下,整个流程中最核心的工具

电脑微信左下角备份手机聊天记录至电脑

通过微信聊天记录生成词云_第2张图片

登录蓝叠模拟器下载微信app登录,该操作会顶掉手机微信, 但是要保持电脑微信登录(模拟器操作略卡耐心等待一下)

电脑微信左下角恢复电脑聊天至手机(模拟器)

通过微信聊天记录生成词云_第3张图片

 2.获取数据库文件

按照图中操作获取模拟器Root权限

通过微信聊天记录生成词云_第4张图片

 模拟器使用下图所述app对模拟器中文档进行处理

通过微信聊天记录生成词云_第5张图片

按照路径寻找到微信聊天记录所在文件位置,蓝框路径下存在两个数字字母结合的文件夹,数据存储在其中一个文件夹中, 找到EnMicroMsg.db,该数据库即为聊天记录

 通过微信聊天记录生成词云_第6张图片

 操作前先将聊天记录中非操作记录删除,再将数据由模拟器中导入至本地文件夹中,蓝叠模拟器可以访问电脑本地文件夹(长按数据库文件,再点击复制操作,跳转到我的形状文件夹下保存,即保存到本地文件夹下了)

通过微信聊天记录生成词云_第7张图片通过微信聊天记录生成词云_第8张图片

 可以聊天记录已经成功保存在本地文件夹下通过微信聊天记录生成词云_第9张图片

 3.数据库文件解密

由于db数据库经过MD5加密,因此对其解密即可成功获取数据

 使用IMEI以及auth_uin即可通过MD5解密即可获取数据

IMEI由于未成功获取到,使用1234567890ABCDEF代替

auth_uin可以通过模拟器中数据文件获取到, 随便在xml文件下找到name = "auth_uin"对应的value值即可

通过微信聊天记录生成词云_第10张图片

通过MD5解密,使用IMEI + auth_uin, 使用32位(小)解密,前7位即为数据库密码

 MD5在线加密/解密/破解—MD5在线 (sojson.com)

使用 sqlcipher工具来加载SQLite数据

下载路径:SQLCipher - Zetetic

即可成功获取数据, File - Export - CSV文件格式即可,至此,我们终于成功获取聊天数据, 一番操作终于拿到了数据就可以尽情发挥了,接下来写一个python脚本生成一个词云图片就大功告成了

 通过微信聊天记录生成词云_第11张图片

通过微信聊天记录生成词云_第12张图片

二、通过数据生成词云

获取停用词表之后,再通过代码即可跑出来词云图片

#-*- coding : utf-8 -*-
# coding:unicode_escape

import re
import jieba
import wordcloud
import pandas as pd

data = pd.read_csv('my_data.csv', encoding='gbk')
data = data[['status','content']]

#我发出的数据
data_me = data[data['status'] == 2]
#我接受到的数据
data_other = data[data['status'] == 4]

print(len(data_me))
print(len(data_other))

stop_words = []
with open('stop_words.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    for mes in lines:
        stop_words.append(mes[:-1])


str_me = ''
str_other = ''

for index in data_me.index:
    mes = data.loc[index]['content']
    if mes != '' and 'wxid' not in mes and '<' not in mes and '[' not in mes:
        str_me += mes

for index in data_other.index:
    mes = data.loc[index]['content']
    if mes != '' and 'wxid' not in mes and '<' not in mes and '[' not in mes:
        str_other += mes

#jieba分词
jieba_me = jieba.lcut(str_me)
ls_me = []
for item in jieba_me:
    if item not in stop_words and len(item) >= 2:
        ls_me.append(item)

jieba_other = jieba.lcut(str_other)
ls_other = []
for item in jieba_other:
    if item not in stop_words and len(item) >= 2:
        ls_other.append(item)

txt_other = " ".join(ls_other)
txt_me = " ".join(ls_other)
txt_all = txt_other + ' ' + txt_me

#保存词云照片
w = wordcloud.WordCloud( font_path = "msyh.ttc", width = 1000, height = 700, background_color = 'white', max_words = 300)
w.generate(txt_other)
w.to_file('other.png')
w.generate(txt_me)
w.to_file('me.png')
w.generate(txt_all)
w.to_file('all.png')

通过微信聊天记录生成词云_第13张图片 

 最终,大功告成!

参考:

利用python分析微信聊天记录

微信聊天记录统计  

你可能感兴趣的:(生活趣事,微信小程序,小程序)