此文数据本分仅适用于小米,其他品牌手机不确定有无此功能。
参考链接:微信聊天记录导出(2020新版)
参考链接:微信聊天记录导出为电脑txt文件教程
参考链接:微信聊天记录统计
1.手机操作
拨打“ *#06# ”获得手机的IMEI码。
手机->设置->更多设置->备份和重置->本地备份,输入开机密码,点击 新建备份,点击软件程序右侧 尖括号,仅选择 微信 ,点击 确定,点击 开始备份,等待备份完成。
将手机连接至电脑,选择 MIUI/backup/ALLBackup/yyyymmdd_xxxxxx/ 文件夹下的 com.tecent.mm.bak , 将文件剪切至电脑。
2.电脑操作
使用解压软件7-zip直接对 com.tecent.mm.bak进行解压。
(使用winRAR没能打开,使用7-zip后打开了)
将文件 com.tecent.mm\apps\com.tencent.mm\r\MicroMsg\xxxx\EnMicroMsg.db
和文件 com.tecent.mm\apps\com.tencent.mm\sp\ auth_info_key_prefs.xml 复制到同一文件夹下。
打开 auth_info_key_prefs.xml ,获得微信的uin码。其中“auth_uin”左侧的“int_value”为微信uin码。
3.获取数据库密码
将第1步获得的 手机IMEI码 与 第2步获得的 微信uin码 拼接,对拼接的字符串进行MD5的32位小写 加密,前7位即为数据库密码。
一个MD5加密网站
例:如IMEI为123456,uin为abc,则拼接后的字符串为123456abc 将此字符串用MD5加密(32位)后为 df10ef8509dc176d733d59549e7dbfaf,那么前7位 df10ef8 就是数据库的密码。
4.聊天记录导出
转载的GITHUB上的软件及程序下载链接https://github.com/Heyxk/notes/tree/master/resource/wechat-tools
下载sqlicipher.exe文件,用sqlicipher打开EnMicroMsg.db数据库,输入第3步获得的数据库密码。
点击菜单栏的 File->Export->Table as CSV file,在table name 中选择message,点击 Export,导出csv文件。
新建excel表格,点击数据->来自文本,选择此csv文件,格式选择为简体中文(GB2312),点击 下一步;分隔符选择 Tab键 和 逗号,点击下一步。
在 talker 一栏,点击 数据->筛选与排序->筛选,选择想要筛选的聊天对象。isSend 列中的1代表聊天中的己方,0代表聊天中的对方。
至此已粗略的将微信聊天记录进行了格式转换。
5.某个人的聊天记录筛选
在python环境中编写如下。得到包含 标准时间、人物id、对话内容 三者的文件。(未筛除无效链接类信息,如果要得到词云等,还需改进。)
import pandas as pd
import time
import csv
from operator import itemgetter
def to_struct_time(t):
struct_time = time.localtime(t) # 将时间戳转换为struct_time元组
year = struct_time.tm_year
month = struct_time.tm_mon
day = struct_time.tm_mday
hour = struct_time.tm_hour
minute = struct_time.tm_min
secend = struct_time.tm_sec
return year, month, day, hour, minute, secend
chat = pd.read_csv('message.csv', sep=',', usecols=[4,6,7,8])
myBoy = 'wxid_xxxxxxx' # talker
chat_all = []
for i in range(len(chat)-1):
content = chat[i:i+1]
if content['talker'].values[0] == myBoy:
iss = content['isSend'].values[0]
t = content['createTime'].values[0]//1000
c = content['content'].values[0]
chat_all.append([t,iss,c])
chat_all = sorted(chat_all, key=itemgetter(0))
#将时间转换为标准格式
chat_time = [x[0] for x in chat_all]
standard_time = []
for t in chat_time:
year, month, day, hour, minute, secend = to_struct_time(t)
standard_time.append(str(year)+"//"+str(month)+"//"+str(day)+" "+str(hour)+":"+str(minute)+":"+str(secend))
for i in range(len(chat_all)-1):
chat_all[i][0]=standard_time[i]
#将时间,人id,内容 写入新的文件
datas = chat_all
# encoding='utf-8-sig' 解决文件中的中文乱码问题
with open('time-id-chat.csv','w',newline='',encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
for row in datas:
writer.writerow(row)