资讯动态

微信聊天记录导出工具:解密数据库并导出HTML/Word/CSV

发布时间:2026/10/2 17:31:14 来源:尧图企业网站定制
简介这是一款面向微信用户、数据分析爱好者及课程作业开发者的微信聊天记录提取与分析工具可解决聊天记录难以长期保存、无法系统回顾的问题。工具支持将聊天记录导出为HTML、Word、CSV等文档实现永久留存同时具备聊天记录分析能力能生成年度聊天报告帮助用户回顾与他人的沟通轨迹。资源包共257个文件约24.96MB以103个Python源码文件为核心辅以61张PNG、43个SVG、18个HTML页面及JSON、Markdown、YAML等配置与文档另含少量pyd、proto、qss、qrc等资源整体结构完整便于二次开发与界面定制。目前已有9737人学习下载热度较高。读者可获得一套可直接运行的聊天管理工具源码涵盖数据提取、多格式导出、可视化报告生成等模块适合用于课程设计、个人数据归档或作为Python桌面应用开发的学习范例。1. 聊天记录导出工具从加密数据库到 HTML/Word/CSV 的完整落地微信 PC 端的聊天记录存在本地加密数据库里直接打开是乱码想长期保存或者做二次分析靠截图和手动复制基本不现实。这个工具解决的就是这件事把本地聊天记录解密、解析再导出成 HTML、Word、CSV 三种格式HTML 适合归档浏览Word 适合打印和批注CSV 适合丢进表格做统计。它面向的是需要留存工作沟通记录、整理课程作业素材、或者做聊天内容分析的人。我拿到包之后第一件事不是急着跑而是先确认自己的微信版本和数据库路径因为这套流程对版本敏感版本对不上后面全是白忙。下面按「先搞懂数据在哪、再动手导出、最后避坑」的顺序拆开讲。2. 先搞清楚数据在哪微信本地存储结构与解密前提2.1 聊天记录到底存在哪个文件夹PC 微信的聊天数据默认落在「文档」目录下的WeChat Files里路径通常长这样# Windows 默认路径把 wxid_xxx 换成你自己的账号目录 C:\Users\你的用户名\Documents\WeChat Files\wxid_xxxxxxxxxxxx\Msg\ # 常见子目录说明 Msg\Multi\ # 多人聊天记录 Msg\Media\ # 图片、语音、视频等媒体文件 Msg\File\ # 收到的文件Msg目录下是一堆.db文件比如MSG0.db、MSG1.db这些就是聊天记录的主库。它们不是明文 SQLite而是经过加密的直接用 SQLite 工具打开会提示「file is not a database」。所以第一步永远是定位目录别急着解密。提示如果你改过微信的存储位置去「设置 → 文件管理」里看实际路径别默认按 C 盘找。2.2 为什么必须解密密钥从哪来微信在运行时会用当前登录账号的信息派生出一个密钥用它对数据库做加密。工具能解密的前提是能从微信进程内存里把密钥读出来。常见做法是微信保持登录状态工具通过读取进程内存拿到密钥再对.db文件做解密输出一份可读的 SQLite 库。这里有个关键点解密必须在微信登录状态下进行。一旦退出登录内存里的密钥就没了工具也拿不到。所以正确顺序是——先登录微信再跑解密最后才做导出。# 典型解密流程示意具体命令以工具实际入口为准 # 1. 保持微信登录 # 2. 运行解密模块指定微信数据目录 python decrypt.py --wx-dir C:\Users\me\Documents\WeChat Files\wxid_xxx # 3. 解密完成后会在输出目录生成可读的 .db 文件 # 输出示例 # output/MSG0.db (SQLite 格式可直接查询)参数说明--wx-dir指向账号目录不是WeChat Files根目录很多人在这里填错一层导致工具找不到库。解密成功后用任意 SQLite 客户端打开MSG0.db能看到MSG、Contact这类表说明这一步过了。2.3 解密后先验证别直接导出解密完不要马上导 HTML先用一条 SQL 确认数据是不是完整的-- 查最近 10 条消息确认表结构和内容正常 SELECT localId, TalkerId, Type, SubType, CreateTime, Content FROM MSG ORDER BY CreateTime DESC LIMIT 10;Type字段区分消息类型文本、图片、系统消息等CreateTime是时间戳。如果这条查询能返回正常内容说明解密没问题如果返回空或者报错多半是密钥没取对或者微信版本和工具不匹配。这一步是后面所有导出的地基地基不稳导出来的 HTML 就是空壳。3. 导出三件套HTML、Word、CSV 的生成逻辑与参数3.1 HTML 导出归档浏览的首选HTML 导出的价值在于「自包含」——把文字、时间、发送人渲染成一个能直接双击打开的网页媒体文件按相对路径引用。工具一般会按联系人或群聊生成独立 HTML方便打包多个 HTML 一起归档。# HTML 导出核心逻辑示意 from exporter import HtmlExporter exporter HtmlExporter( db_pathoutput/MSG0.db, media_dirMsg/Media, # 媒体文件目录用于生成图片引用 output_direxport/html, themelight, # 主题light / dark show_avatarTrue # 是否显示头像 ) exporter.export_by_contact(wxid_friend001)逻辑说明db_path是解密后的库media_dir决定图片能不能显示出来output_dir是导出落点。export_by_contact按联系人维度切分避免所有聊天挤在一个巨型 HTML 里。参数上show_avatar打开后 HTML 体积会变大如果只是自己看关掉更清爽。导出的 HTML 头部是标准结构类似!DOCTYPE html html langzh-cn head meta charsetutf-8 meta nameviewport contentwidthdevice-width, initial-scale1 title与 xxx 的聊天记录/title /headcharsetutf-8必须保留否则中文会乱码这是最常见的翻车点之一。3.2 Word 导出打印和批注场景Word 导出适合需要打印、或者要在文档里做批注的场景。工具通常用 python-docx 这类库把每条消息写成一个段落发送人加粗时间用灰色小字。from docx import Document from docx.shared import Pt, RGBColor doc Document() for msg in messages: p doc.add_paragraph() run p.add_run(f{msg.sender} {msg.time}\n) run.bold True run.font.size Pt(10) run.font.color.rgb RGBColor(0x88, 0x88, 0x88) doc.add_paragraph(msg.content) doc.save(export/word/chat.docx)逻辑说明每条消息拆成「头部段落 内容段落」头部放发送人和时间内容单独成段这样在 Word 里排版不会挤成一坨。参数上字号和颜色按需调Pt(10)是经验值太大打印费纸太小看不清。注意 Word 导出不含图片时体积很小含图片要额外处理否则文档会缺图。3.3 CSV 导出做统计和二次分析CSV 是三种格式里最适合做数据分析的。每条消息一行字段固定丢进 Excel 或者 pandas 就能按时间、按联系人做统计。import csv with open(export/csv/chat.csv, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([时间, 发送人, 类型, 内容]) for msg in messages: writer.writerow([msg.time, msg.sender, msg.type, msg.content])逻辑说明encodingutf-8-sig是关键带 BOM 的 UTF-8 能让 Excel 直接正确识别中文否则打开就是乱码。newline防止 Windows 下多出空行。字段设计上类型字段保留下来方便后续筛选纯文本消息做词频统计。三种格式的取舍可以对照下表格式适用场景是否含媒体体积二次处理HTML归档浏览、分享可含中弱Word打印、批注需额外处理小弱CSV统计、分析不含小强3.4 批量导出与打包多个 HTML实际使用中很少只导一个联系人通常是全量导出。工具一般支持按联系人循环最后把多个 HTML 打包成一个目录配合一个索引页跳转。# 批量导出所有联系人到 html 目录 python export.py --db output/MSG0.db --format html --all --out export/html # 打包多个 HTML 便于归档 tar -czf chat_html_archive.tar.gz export/html/参数说明--all表示全部联系人--format切换 html/word/csv--out指定落点。打包成 tar.gz 是为了归档时保持目录结构解压后索引页的相对路径不会断。4. 避坑与排查版本、密钥、编码这三关最容易翻车4.1 现象解密报错「找不到密钥」原因微信没登录或者登录的账号和数据库目录对不上。工具读的是当前登录账号的内存账号切换后旧目录的密钥就失效了。解决确认微信处于登录状态且登录账号与wxid_xxx目录一致如果刚切换过账号重启微信再跑一次解密。4.2 现象导出的 HTML 中文全是乱码原因HTML 头部缺charsetutf-8或者写文件时用了默认编码。解决检查导出模板的meta charsetutf-8是否存在CSV 用utf-8-sigHTML 用utf-8两者别混。4.3 现象CSV 用 Excel 打开是乱码原因写文件时用了纯utf-8Excel 在中文 Windows 下默认按 GBK 解析。解决改成encodingutf-8-sig让文件带 BOM 头Excel 就能正确识别。4.4 现象图片在 HTML 里显示不出来原因media_dir路径填错或者导出后移动了 HTML 文件相对路径断了。解决导出时确认media_dir指向真实的Msg/Media归档时把 HTML 和媒体目录一起打包别只拷 HTML。4.5 现象微信升级后工具直接失效原因微信版本更新会改动数据库结构或密钥派生方式工具没跟上。解决升级微信前先确认工具是否支持当前版本如果已经升级回退到工具支持的版本或者等工具更新。这类工具对版本敏感是常态别指望一次配置永久有效。5. 进阶把 CSV 接进分析流程顺带验证导出完整性导出只是第一步真正有价值的是拿 CSV 做二次分析。我一般会先做一次完整性校验再做统计避免拿到残缺数据还浑然不知。import pandas as pd df pd.read_csv(export/csv/chat.csv, encodingutf-8-sig) # 1. 完整性校验消息数、时间范围、空内容比例 print(总消息数:, len(df)) print(时间范围:, df[时间].min(), →, df[时间].max()) print(空内容比例:, df[内容].isna().mean()) # 2. 按发送人统计消息量 print(df[发送人].value_counts().head(10)) # 3. 按小时分布看聊天活跃时段 df[小时] pd.to_datetime(df[时间]).dt.hour print(df[小时].value_counts().sort_index())逻辑说明第一步校验是后悔药空内容比例如果异常高说明导出时字段映射错了第二步看消息量分布能快速发现某个联系人是不是漏导第三步按小时聚合是做聊天行为分析最常用的入口。参数上encodingutf-8-sig和导出时保持一致否则读进来就乱码。如果要做词频可以再接一步分词但那是另一个话题了。这里的关键是导出完必须验证别默认工具一定对。我自己就遇到过导出 HTML 看着正常、CSV 却少了几百条的情况原因是某个Type的消息没被写进 CSV 分支。从那以后我每次导出完都强制跑一遍上面的校验确认消息数和时间范围对得上才敢把原始库删掉。希望这套流程帮到你少走点我踩过的弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑