提取邮箱地址的时候, 大家得注意一个核心办法。这个办法其实就是唯一的一个思路。你需要用正则表达式去匹配那个格式。而且要匹配的格式必须符合RFC 5322标准。
接着要结合具体情况的载体。这些载体包括了文档啊网页啊数据库什么的。最后要批量地去执行这个过程。下面我们要看看不同场景下的完整操作路径。还要讲讲工具选择的依据是什么呢。
按数据来源选择提取路径
1. 把txt文件、Word文档、Excel表格还有PDF这些类型的文件里面所包含的内容给转换为纯文字的状态, 然后再去通过正则表达式在全部范围内进行匹配查找的操作, 对于Excel这种电子表格文件来说的话, 可以利用里面的查找和替换功能来辅助完成筛选的工作, 而对于PDF文件而言, 则必须先要把其中所包含的文本部分提取出来, 或者是运用光学字符识别技术处理完成之后再去进行匹配的查询操作。
2. 这一步是对网页或者是HTML代码来进行提取的操作, 具体的做法是先对HTML的源码内容做一个解析的过程, 然后在里面去定位这个标签所拥有的href属性的值, 或者找到标签里面存放的邮箱地址的那些字段, 最后再用正则表达式的方法对这些信息进行处理, 目的是筛选并且过滤出那些符合合法格式的邮箱数据出来。
3. 在MySQL数据库中, 开发人员可以使用REGEXP操作符来进行数据处理。在PostgreSQL数据库里, 开发者可以选择使用~符号, 或者使用SIMILAR TO关键字来完成任务。这些方法可以直接对email字段执行条件筛选操作。这就是所谓的数据库提取过程。
通用正则表达式与校验规则
简化版匹配模式:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
这个模式能够覆盖绝大多数实际应用场景。所以在完成提取动作之后, 有必要进行二次校验环节。具体要确认域名是否能够正常解析, 同时还要检查用户名的长度是不是小于或等于六十四字符, 并且整体长度也要小于或等于二百五十四字符。
这一系列判断都是依据RFC 5321以及RFC 5322的规定来执行的, 最终目的是为了剔除掉那些不合规的条目。
常用邮箱地址提取工具对比
批量操作三个关键环节
1. 先把重复的邮箱给去掉。等提取的动作全部完成了, 就用MD5哈希或者SHA1哈希的方式, 也可以用集合操作的方法, 把那些重复存在的邮箱号码统统消除掉。
2. 格式校验: 这一步会直接把那些含有非法字符的条目给去掉, 也会把那种缺少域名的条目给去掉, 同时还会把域名无法解析的条目给去掉。
3. 做好合规方面的处理工作就是如果事情牵扯到了用户的隐私数据, 那么把这些数据拿来提取以及保存起来的时候, 必须严格依据《个人信息保护法》里面所制定的各项规定来执行, 必须在得到了合法的授权之后, 才允许对这些数据进行使用。
常见问题与排查
提取结果为空:这表示检查了正则表达式中的特殊字符, 看它们是否被正确地进行了转义处理;同时还确认了源文件的编码格式属于 UTF-8 编码类型。
部分邮箱被截断: 在源文件里, 有些邮箱地址可能是被HTML标签给弄断了, 或者是被换行符切开了, 这些HTML标签就像那样出现在那里, 所以, 必须先把文本合并起来做预处理工作, 然后才能进行正常的匹配操作, 这一点是需要注意的。
Excel把邮箱变成超链接, 先把目标列的格式改成文本样子, 之后再粘上原来的内容, 别因为格式被改了造成提取出问题的情况出现。
选择工具的时候, 核心依据是数据量的规模和自动化的程度。如果是小批量的情况, 就用在线正则处理。如果是中批量的情况, 就使用Python脚本。若是大批量, 或者需要集成到业务系统的场景下, 要选用专用的API服务来解决问题。


