手把手教你用Python分析微信聊天内容

时间:2019-09-29
本文章向大家介绍手把手教你用Python分析微信聊天内容,主要包括手把手教你用Python分析微信聊天内容使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在开始之前, 先简单说下我为何会写这篇文章?

为了开发新客户, 领导安排公司的客服们加入了很多的微信群, 在群内收集目标客户的联系方式.

然而她们收集客户信息的方式非常的原始: 在微信群内翻看群聊记录 -> 寻找客户发出的电话号码 -> 复制 -> 打开公司内部APP -> 填写表单 -> 粘贴客户电话号码 -> 提交 -> 继续翻看群聊记录.
如此这般循环往复. 效率低且枯燥.
我觉得客服小姐姐们, 肯定是很不乐意做这项工作的.

所以我向领导提议, 用代码来实现这个工作.
目前, 上面的这个流程我已经用代码实现了, 为了记录实现的过程, 就有了这篇文章.

希望对遇到类似需求的您, 能够有所帮助.

本文目录

  1. 介绍需要用到的工具
  2. 备份手机资料并导出微信聊天记录数据
  3. 使用DB Browser查看微信聊天数据
  4. 用Python读取聊天数据
  5. 总结

1. 需要用到的工具

俗话说, 工欲善其事, 必先利其器. 合适的工具, 往往能够事半功倍.
这里用到的工具有:

名称 备注
iPhone手机 抱歉, 我没有安卓手机, 所有没有在安卓机上进行测试
iTunes软件 用来备份iPhone手机数据, 备份时, 一定要选择"不加密"备份, 否则数据无法读取
iPhone Backup Extractor 用来导出微信数据库, 虽然是收费软件, 但是其免费的功能在这里已经够用了
DB Browser for SQLite 免费的数据库可视化软件, 用来查看sqlite数据库
Python 3.7 os, sqlite3, re, pymysql, emoji

2. 备份手机资料并导出微信聊天记录数据

2.1 备份手机资料到iTunes

用数据线把iPhone连接至电脑, 打开iTunes进行备份.
不要勾选"加密备份"

2.2 导出聊天记录数据

这一步需要借助一个软件iPhone Backup Extractor.

这个软件虽然收费, 但是其免费功能对我们来说已经够用了.
打开这个软件, 可以看到如下界面:

通过上图可以看到:
左侧是已经备份的iPhone手机列表
右侧选择expert mode, 稍等一会儿之后, 就会看到软件右侧区域显示了备份文件的目录结构.

那么, 我们需要备份的文件是什么?在哪里呢?

我们需要导出的文件是: MM.sqlite, WCDB_Contact.sqlite

其中 MM.sqlite是存放微信聊天内容相关的数据, WCDB_Contact.sqlite是微信联系人相关的数据.

文件路径是: Applications/com.tencent.xin/微信名称MD5/DB/

按照图片的标注, 选中这两个文件, 然后点击Extract selected按钮, 进行文件的导出.
免费版的软件, 在导出文件之前, 需要等待10s.

文件导出的速度很快, 几乎不用等待.这个时候打开桌面, 就可以看到导出后的文件了.

3. 使用DB Browser查看微信聊天数据

首先安装数据库可视化工具DB Browser for SQLite, 点击下载

打开这个软件, 点击打开数据库

选中导出后的文件MM.sqlite:

打开文件之后, 点击浏览数据, 然后在下拉框里可以快速切换不同的表.
其中, 以Chat开头的表, 就是存放聊天记录的表. Message字段就是聊天内容.

接着, 我们再打开另外一个文件WCDB_Contact.sqlite:

切换到Friend这张表, 可以看到如下字段.
其中, dbContactRemark字段应该就是联系人的备注;
userName就是联系人的微信名称, 其中名称带有@chatroom的, 表示这是一个微信群聊;

好了, 现在我们已经找到了微信聊天记录, 也找到了微信联系人, 就可以开始用Python进行处理了.

4. 用Python读取聊天记录内容

实现过程很简单, 我看了自己的代码, 总共不到100行, 所以代码就不贴出来了, 因为写的很烂 - . -
只简单说下思路吧.

  1. 连接这两个导出的数据库.
  2. 循环遍历其中的表.
  3. 遍历每一条聊天内容,并用正则表达式匹配其中的电话号码.
  4. 如果该条聊天记录存在电话号码,则写入自己的数据库. 写入的字段有 电话号码, 微信昵称, 聊天内容, 发送时间

大概就是以上这些.

5. 总结

整个过程的实现还是比较快的, 大概花了半个工作日.
代码虽然简单, 却实实在在给公司节省了不少的人力成本, 还是蛮有成就感的.

我自己的体会: 要多观察周围的生活, 找到其中重复劳作的部分, 并用程序去优化, 可能这就是做程序员的乐趣所在.

我有个公众号, "每天刷一题", 麻烦看官关注下呗, 会不定期赠送前端和Python学习资料.

原文地址:https://www.cnblogs.com/guohaojintian/p/11608716.html