网页上直接写出联系邮箱,很快就会被垃圾邮件发送者的爬虫程序扫描收集——邮箱混淆的思路和 JS 代码混淆有点像:不是把邮箱藏起来不让人看到,而是让"扫源码抓文本"这种最省事的采集方式失效。
最简单、成本最低的邮箱地址采集方式,是用程序批量抓取网页的 HTML 源代码,用正则表达式匹配出符合"邮箱地址格式"(形如 xxx@xxx.xxx)的文本片段,收集起来加入垃圾邮件发送名单。这类采集器的特点是只读取原始 HTML 文本,不会真正在浏览器环境里渲染页面、执行 JavaScript——这个特点恰好是邮箱混淆技术能够利用的突破口。
邮箱混淆工具通常会组合使用几种方式,让页面源码里不出现连续、完整、能被正则表达式直接匹配到的邮箱字符串,但最终呈现给真实用户浏览器的效果和明文邮箱完全一样:
@ 写成 @),浏览器渲染 HTML 时会自动把实体编码还原成对应字符正常显示,但源码文本层面已经不是一个能直接匹配"邮箱格式"的连续字符串邮箱混淆的防护效果高度依赖爬虫本身的实现方式:对只抓取原始 HTML 文本、不执行 JavaScript 的简单采集器(这是垃圾邮件采集器里成本最低、也最常见的一类),上述混淆手段几乎都能有效挡住,因为它们抓到的源码文本里根本就没有能直接匹配出邮箱格式的连续字符串;但对于会启动完整浏览器环境渲染页面、执行 JavaScript 的高级爬虫(技术上和真实用户看到的渲染结果完全一样),这些混淆手段全都会失效——因为这类爬虫看到的"最终页面内容"和真人用户看到的没有任何区别,混淆只是让"直接读源码"这条路走不通,并不能真正阻止一个愿意投入更高成本、模拟真实浏览器行为的采集程序。这也是为什么邮箱混淆工具的说明都会强调"这是混淆不是加密"——它提高的是最低成本采集方式的门槛,不是绝对意义上的防护。
在线工具:Email邮箱混淆