之前给大家详细讲解过如何用小米手机导出微信聊天记录:
今天再给大家讲解一下如何直导出mac版本微信的聊天记录,当然如果你没有mac,那可以直接关闭这篇文章了。
文末附上了我粉丝群的全部聊天记录文件,大家可以看个乐呵,也可以拿去处理处理做成数据另供它用。
聊天记录位置
首先我们要知道,mac微信的聊天记录都以数据库的形式保存在下面目录:
~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/xxx/yyy/Message/*.db
所以我们只需要拿到这个目录下的所有形如msg_0.db
的数据库文件即可,但是都是加密的,所以我们要想办法拿到它们的密码。
破解密码并打开数据库
- 打开mac微信,但是不要登录。
- 打开终端,输入
sudo lldb -p $(pgrep WeChat)
。这时候可能会报错:error: attach failed: cannot attach to process due to System Integrity。不要慌,重启mac电脑,黑屏后一直按住Command+R
,直到出现恢复模式界面。点击顶部Utilities菜单,然后打开终端。最后输入csrutil disable; reboot
等待重启,重新执行开始的命令就行了。 - 进入lldb的子shell后,输入
br set -n sqlite3_key
,回车。 - 输入
c
,回车。 - 这时候会弹出微信登录界面,登陆就行了。登陆后可能会卡住,进不去微信,但不用管,继续下面的操作。
- 继续在lldb的子shell中输入
memory read --size 1 --format x --count 32 $rsi
,这时会输出类似如下信息:
0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
- 用python处理上面的输出信息:
source = """ 0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd 0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd """ key = '0x' + ''.join(i.partition(':')[2].replace('0x', '').replace(' ', '') for i in source.split('\n')[1:5]) print(key) # 输出为:0xabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcd
此时的输出就是数据库的密码raw_key
,一定要记住。8. 下载打开数据库的软件DB Browser for SQLite,地址:
https://sqlitebrowser.org/dl/
- 打开软件,打开数据库,选择上一小节中提到的形如
msg_0.db
的数据库文件。然后会让你输入密码,记住选择raw key
和SQLCipher 3 defaults
,这时候就能正常打开了。
导出聊天记录并分析
打开数据库后,可以看到有200多张表格,每张表格就是你和一个人的单聊记录或者一个群组的聊天记录。
选择文件-导出-表到json
,全选所有的表格,就可以将所有的聊天记录导出为json文件了。
再打开msg1.db
、msg_2.db
等类似数据库,全部导出到一个文件夹下。
然后用任意ide打开这个文件夹,我用的是vscode。然后就可以根据你想导出的人的聊天记录中的某条语句,全局搜索它在哪个文件中。
然后就可以用下面代码将聊天记录转换成txt文本文件了:
import json fin = open("Chat_6ea1007e9a74fd049e11be33700d8dfd.json", "r") fout = open("group.txt", "w") results = json.load(fin) for dic in results: if dic["messageType"] == 1: content = dic["msgContent"] if dic["mesDes"] == 1: msg = content.strip().split(":\n")[1].replace("\n", " ").replace("\r", " ") else: msg = content.strip().replace("\n", " ").replace("\r", " ") fout.write("{}\n".format(msg))
最后用我之前介绍过的词云就可以分析聊天记录里最常出现的词语是什么了,代码地址如下:
https://github.com/godweiyang/wordcloud
给大家看看我的粉丝群里最活跃的一位粉丝都爱说些什么:
你还可以用导出的文本数据干很多事,比如训练一个聊天机器人。代码我也开源出来了,不过你得先自己处理好训练数据:
https://github.com/godweiyang/chatbot
粉丝群全部聊天记录
我把我粉丝技术交流群一共10w多条聊天记录导出来了,从2020.5.5开始的,因为是群聊,所以也就直接公开了。在我公众号后台回复「777」获取。