文章关键词:电子数据取证、聊天记录恢复、数据恢复、手机取证、介质取证
一、前言
在最近的取证工作中,我们遇到很多需要从大量的聊天记录数据中提取特定的信息,例如手机号码,银行号码,交易码。由于数据通常以数据库或表格的形式存在,手动复制粘贴并筛选是低效且耗时的。本文将介绍如何利用 Python 高效地从数据库或表格中提取手机号码。
二、案件背景
在这个案件中,目标人通过微信在几十个微信群中进行活动。其中一个微信群引起了关注,因为该群的成员命名方式是"姓名+手机号码",而这些成员每天都在该群中发布他人的手机号码。目前,目标人已经被抓获,调查员使用LX-A200手机取证系统成功固定了他的微信聊天记录,并将其导出为Excel表格。现在,警方希望通过分析这些聊天记录来确定是否存在突破口,并统计群员发送手机号码的情况。
为了高效提取数据,调查员对导出的Excel表格进行了分析。他们发现在聊天内容中直接提取手机号码是困难的,手动复制粘贴并筛选是低效且耗时的工作。因此,需要编写一个Python脚本来实现自动化的数据提取。该脚本将帮助他们快速从聊天记录中提取相关信息,以便进一步分析和调查。
三、Python安装&调试
在开始高效提取数据之前,我们需要确保已经安装了 Python 编程环境,并安装了所需的库和模块。我们推荐使用 Pycharm 作为开发环境,因为它具有智能化的代码提示和调试功能,可以提高开发效率。
我们将使用 Pandas 库来处理表格数据,使用正则表达式模块 re 来匹配手机号码和地址。在 Pycharm 中,我们可以使用 Pandas 库的交互式界面来轻松地导入和清理数据,使用正则表达式模块来匹配手机号码和地址,从而提高数据提取的效率和准确性。
要安装 Pandas 库和 re 模块,请运行以下命令:
pip install pandas
pip install re
安装完成后,可以使用以下代码来检查是否已经安装成功:
import pandas
import re
print("pandas版本号:" + pandas.__version__)
print("re模块版本号 :" + re.__version__)
如果成功安装,则会出现图1的界面,这里可以看出我的pandas版本是1.5.3,re模块版本号是2.2.1。
图1 安装成功样式
四、数据分析
在编写代码之前,我们需要对处理的表格进行预处理。
4.1、预处理:
步骤1:我们需要复制一份表格(以防操作失误,还可以还原)。
步骤2:我们可以删除不需要的列,使数据更加精确且处理时间更快。
步骤3:需要找到所需处理的数据在哪一列,并记住该列的数字,以便后续编写代码时使用。
步骤4:我们需要分析该列中的数据。如果存在以"http://"、"url."等网址开头的数据,则这些数据是无效的,可以选择将这些行删除。对于其他有效数据,我们需要确认数据的格式,并检查是否存在包含两个手机号码的数据。完成这些预处理工作后,我们就可以开始编写代码了。
4.2、代码编写:
在处理大量数据时,我们需要让计算机知道要提取哪些数据?例如下图2中,我们需要把手机号码提取出来。
图2 手机号码样本
我们可以使用前面安装的re模块来匹配数据。re模块是一个正则表达式模块,可以用来匹配字符串中的数据。
在正则表达式中,^表示匹配字符串的开头,$表示匹配字符串的结尾。由于手机号码是以1开头,后面跟着10个数字,因此可以使用正则表达式r'^1\d{10}$'来匹配手机号码。但是,这样会匹配出一些无效的手机号码,因为手机号码的第二位是3-9。因此,我们可以改进正则表达式,使用r'^1[3-9]\d{9}$'来匹配以1开头,第二位是3-9之间的数字,后面跟着9个数字的字符串。这样,我们就可以准确地匹配中国大陆的手机号码了。
完成整个代码最核心的内容后,只需用pandas识别表格内容在加一点判断即可,代码如下图3所示:
图3 代码编写
这里需要提取的数据是在第三列,所以代码中“if len(df.columns) > 2”我写的是2(计算机从0开始计数,即0是1),如果需要提取的数据在第四列,只需2改成3。
4.3、数据结果
代码编写完成后,我们运行下看看结果,如下图4所示:
图4 结图对比
可以看出将有效的手机号码都匹配处理了,不论手机号码在什么位置,或者前面加了什么字符,都是能匹配出来。
五、正则表达式运用
在本次Python取证实战中,我们使用了re模块来编写正则表达式,用于从Excel和CSV表格中提取手机号码。但是这时候需要提取的数据是身份证号码,我们只需要将修改下正则表达式,下面给大家列举一些常用的正则表达式。
- 匹配手机号码:r'^1[3-9]\d{9}$'
- 匹配邮箱地址:r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$'
- 匹配身份证号码:r'^\d{17}[\dXx]$'
- 匹配URL地址:r'^https?://[\w-]+(.[\w-]+)+([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?$'
- 匹配地址: IPr'^((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$'
- 匹配日期格式:r'^\d{4}-\d{2}-\d{2}$'
- 匹配时间格式:r'^\d{2}:\d{2}:\d{2}$'
- 匹配中文字符:r'[\u4e00-\u9fa5]'
- 匹配英文字符:r'[a-zA-Z]'
10.匹配数字:r'\d'
正则表达式是一个强大的工具,可以用于匹配字符串中的特定模式,从而提取出所需的信息。通过修改正则表达式,我们可以轻松地匹配出不同格式的数据,大大提高数据处理和文本处理的效率和准确性。
六、总结
使用Python高效提取Excel和CSV表格数据是数据分析和处理的重要步骤。通过使用Pandas库和re模块,可以方便地读取和处理表格数据,并进行数据清洗和预处理。在提取表格数据时,需要注意数据类型和格式的一致性、编码格式的一致性、数据缺失和异常值的处理、数据安全性等问题。同时,使用正则表达式提取表格数据时,需要注意正则表达式的语法、数据格式的一致性、正则表达式的效率和可读性等问题。通过注意这些问题,可以确保提取的表格数据准确、可靠、安全,并为后续的数据分析和处理提供便利。