手把手教你用Python分析微信聊天内容
在开始之前, 先简单说下我为何会写这篇文章?
为了开发新客户, 领导安排公司的客服们加入了很多的微信群, 在群内收集目标客户的联系方式.
然而她们收集客户信息的方式非常的原始: 在微信群内翻看群聊记录 -> 寻找客户发出的电话号码 -> 复制 -> 打开公司内部APP -> 填写表单 -> 粘贴客户电话号码 -> 提交 -> 继续翻看群聊记录.
如此这般循环往复. 效率低且枯燥.
我觉得客服小姐姐们, 肯定是很不乐意做这项工作的.
所以我向领导提议, 用代码来实现这个工作.
目前, 上面的这个流程我已经用代码实现了, 为了记录实现的过程, 就有了这篇文章.
希望对遇到类似需求的您, 能够有所帮助.
本文目录
- 介绍需要用到的工具
- 备份手机资料并导出微信聊天记录数据
- 使用DB Browser查看微信聊天数据
- 用Python读取聊天数据
- 总结
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行, 所以代码就不贴出来了, 因为写的很烂 - . -
只简单说下思路吧.
- 连接这两个导出的数据库.
- 循环遍历其中的表.
- 遍历每一条聊天内容,并用正则表达式匹配其中的电话号码.
- 如果该条聊天记录存在电话号码,则写入自己的数据库. 写入的字段有 电话号码, 微信昵称, 聊天内容, 发送时间
大概就是以上这些.
5. 总结
整个过程的实现还是比较快的, 大概花了半个工作日.
代码虽然简单, 却实实在在给公司节省了不少的人力成本, 还是蛮有成就感的.
我自己的体会: 要多观察周围的生活, 找到其中重复劳作的部分, 并用程序去优化, 可能这就是做程序员的乐趣所在.
我有个公众号, "每天刷一题", 麻烦看官关注下呗, 会不定期赠送前端和Python学习资料.
原文地址:https://www.cnblogs.com/guohaojintian/p/11608716.html
- 碎片化 | 第六阶段-04-搭建nginx和Tomcat集群环境-视频
- SQL注入攻防入门详解
- jQuery插件编写步骤详解
- 深入探秘Neutron API
- 碎片化 | 第七阶段-10-session共享解决方案-视频
- CSS选择器是如何确定优先级的?
- JS中控制好this关键字的指向
- 碎片化 | 第四阶段-46-值栈valueStack介绍和原理-视频
- Laravel中运行Gulp任务的利器(一) —— Laravel Elixir简介及入门教程
- 碎片化 | 第四阶段-52-Hibernate特性-视频
- 碎片化 | 第四阶段-53-hibernate持久化session问题解决-视频
- 入门webpack(下)
- 巨头们关注的实时Web:发展与相关技术
- 碎片化 | 第四阶段-54-hibernate-spring整合流程-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 5.01-requests_auth
- Git分支操作
- 5.02-requests_proxy
- 5.03-requests_ssl
- 5.04-requests_cookies
- 通过 Node.js 小示例学习浏览器缓存策略
- [未解决]报错: execjs._exceptions.ProgramError: TypeError: Cannot read property 'extend' of undefined
- 5.05-requests_cookies2
- 5.06-re
- Python3爬虫 利用百度地图api得到城市经纬度
- [未解决]报错: pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in y
- 6.01-re-split_chinese
- Mac上安装tesseract-OCR
- 6.02-news_re
- 6.03-news_xpath2