图片来源
448 字
2 分钟
微信聊天记录导出方案
花絮
猜你没见过:

新的微信比 NTQQ 还新,虽然现成的项目多,但是大部分都失效了,目前比较省事的有两个方向:
- 解析 iOS/iPadOS 的备份得到聊天记录
- root 安卓直接拿到数据库然后破解
我的荣耀手机不能 root,所以只试了第一个。
iOS 导出步骤
我试了好多别的项目,最终使用了 WeChatExporter (因为就这个还能用),项目地址: https://github.com/BlueMatthew/WechatExporter
备份 iPhone 或 iPad
mac 用 finder,windows 用 iTunes 备份一下 iPad

用 WeChatExporter 导出
项目的 release 里的 mac 版只有会闪退的 x64 版本,无奈之下我用 crossover 开了 windows 版的。

导出没有 csv 的选项,导出成文本的话会掺杂很多表情包的 [Facepalm] [Lol]……,图片消息 [Image] 等乱七八糟的文本,并不太好全部筛除,所以我选择了导出成 html 之后再解析 html。
导出之前最好在 Options 里面把异步加载关了,不然网页不是静态的,不好处理。
处理 html
复制里面的一个 html 出来,比如叫 index.html.
from bs4 import BeautifulSoup as BSimport pandas as pd
# 读文件with open('index.html', 'r', encoding='utf-8') as f: raw_content = f.read()
# 顺便还能复习一下 BeautifulSoup 的说soup = BS(raw_content, 'lxml')
results = []# msgtype = 1 筛出来所有的文本消息for msg in soup.find_all('div', class_='msg', msgtype='1'): # 判断是谁发的 if 'left' in msg.get('class', []): user = False elif 'right' in msg.get('class', []): user = True else: user = None
# 获取时间 nt_box = msg.find('div', class_='nt-box') if nt_box: time_text = nt_box.get_text(strip=True) # 获取消息内容 msg_text_tag = msg.find('span', class_='msg-text') if msg_text_tag and msg_text_tag.pre: content = msg_text_tag.pre.get_text(strip=True) else: content = None results.append({'time': time_text[-19:], 'content': content, 'user': user})
# 转成 DataFrame 保存df = pd.DataFrame(results)df.to_csv('wx.csv')截止到现在所有数据的问题就都解决了,接下来可以愉快的分析数据了。
部分信息可能已经过时







