反馈

邮箱地址混淆是怎么防爬虫的

网页上直接写出联系邮箱,很快就会被垃圾邮件发送者的爬虫程序扫描收集——邮箱混淆的思路和 JS 代码混淆有点像:不是把邮箱藏起来不让人看到,而是让"扫源码抓文本"这种最省事的采集方式失效。


目录

  1. 垃圾邮件采集器是怎么工作的
  2. 常见的混淆手段
  3. 混淆挡得住哪种爬虫,挡不住哪种

1. 垃圾邮件采集器是怎么工作的

最简单、成本最低的邮箱地址采集方式,是用程序批量抓取网页的 HTML 源代码,用正则表达式匹配出符合"邮箱地址格式"(形如 xxx@xxx.xxx)的文本片段,收集起来加入垃圾邮件发送名单。这类采集器的特点是只读取原始 HTML 文本,不会真正在浏览器环境里渲染页面、执行 JavaScript——这个特点恰好是邮箱混淆技术能够利用的突破口。

2. 常见的混淆手段

邮箱混淆工具通常会组合使用几种方式,让页面源码里不出现连续、完整、能被正则表达式直接匹配到的邮箱字符串,但最终呈现给真实用户浏览器的效果和明文邮箱完全一样:

  • HTML 实体编码:把邮箱地址里的字符替换成对应的 HTML 实体编码(比如 @ 写成 @),浏览器渲染 HTML 时会自动把实体编码还原成对应字符正常显示,但源码文本层面已经不是一个能直接匹配"邮箱格式"的连续字符串
  • 拆分 + JS 还原:把邮箱地址拆成几段分别写在 HTML 里,配合一段 JavaScript 脚本在页面加载后把这几段重新拼接、渲染回完整地址——只读源码看到的是几段无意义的碎片,不执行 JS 就无法还原出完整邮箱
  • CSS 方向反转:利用 CSS 的文字方向属性(比如把邮箱字符串反着写在源码里,再用 CSS 设置成从右往左显示),源码里的字符顺序和视觉呈现的字符顺序不一致,正则匹配源码文本得到的是反过来的字符串

3. 混淆挡得住哪种爬虫,挡不住哪种

邮箱混淆的防护效果高度依赖爬虫本身的实现方式:对只抓取原始 HTML 文本、不执行 JavaScript 的简单采集器(这是垃圾邮件采集器里成本最低、也最常见的一类),上述混淆手段几乎都能有效挡住,因为它们抓到的源码文本里根本就没有能直接匹配出邮箱格式的连续字符串;但对于会启动完整浏览器环境渲染页面、执行 JavaScript 的高级爬虫(技术上和真实用户看到的渲染结果完全一样),这些混淆手段全都会失效——因为这类爬虫看到的"最终页面内容"和真人用户看到的没有任何区别,混淆只是让"直接读源码"这条路走不通,并不能真正阻止一个愿意投入更高成本、模拟真实浏览器行为的采集程序。这也是为什么邮箱混淆工具的说明都会强调"这是混淆不是加密"——它提高的是最低成本采集方式的门槛,不是绝对意义上的防护。


在线工具:Email邮箱混淆