使用 Python 3 转 HTML 实体字符,防邮箱爬取

 

2018-05-09

起源于在 V2EX 上看到一篇文章,作者在最后附上用 Base64 编码的邮箱,虽然能够有效防止一般爬虫,但感觉不够优雅。在网上搜了一圈,发现可以把邮箱转为 HTML 字符实体 的方式达到类似目的,在网页上能够正常显示,但邮箱地址并不会直接出现在源码中。

HTML 字符实体 英文为 HTML Entities ,主要是表示预留字符和一些键盘无法输入的字符。在网上搜了一圈,发现没有能直接把字符转为 HTML 字符实体 的方法,预留字符倒是可以通过 html.unescape 来转换,但中英文字符就不行了。不过因为 HTML 使用的也是 Unicode 字符集,所以我们可以通过把英文字符转为 Unicode,然后再加上 &#; 来实现。

转换

首先是尝试把字符转为 Unicode 编码

1
# 使用内建函数 ord() 实现编码转换
2
>>> ord('w')
3
119

拼接

然后把转换完成的 Unicode 拼接成 HTML 字符实体,即在 Unicode 前加上 &#Unicode 后加上 ;

1
# 使用 join() 完成拼接
2
>>> ''.join('&#' + str(ord('w')) + ';')
3
'w'

这样,转换完成的便是 HTML 可以识别的字符实体,把它直接加进 Markdown,或者是以 HTML 的方式写入都可以。

完整代码

1
def character2unicode(mail):
2
"""转换字符为 HTML 字符实体,并返回"""
3
return ''.join('&#' + str(ord(m)) + ';' for m in mail)
4
5
if __name__ == "__main__":
6
print(character2unicode('[email protected]'))

参考