网页抓取 加密html(Python实现通过这位大神的解决思路写一个解密电子邮箱的函数)
优采云 发布时间: 2021-10-03 16:03网页抓取 加密html(Python实现通过这位大神的解决思路写一个解密电子邮箱的函数)
1、问题的根源
在数据采集的过程中,往往需要采集各种*敏*感*词*,包括邮箱地址。一些未加防卫的网站邮箱地址可以直接从网页源码中获取,有些网站对爬虫稍加防范,会将邮件中的@符号替换为#号:
在我最近的工作中,我遇到了一种以前从未遇到过的电子邮件加密方法。在查看元素时可以获得正确的数据:
在查看网页源代码时,还可以定位到对应的元素:
但是从上图可以发现,它对应的是显示邮件的位置,并且显示了一个“[email protected]”链接。让我们检查源代码:
这个用于显示电子邮件的字段与其他文本不同。如果是非邮件数据,则没有链接;如果是邮件数据,则通过这个链接在网页前端显示数据。
2、解决方案
经过一番搜索,在百度知道中找到了它的原理和解决方法:
加密只是简单的异或运算,解密起来并不难。
3、Python 实现
通过这位大神的解决方案,我们可以快速使用Python编写一个解密电子邮件的函数。
首先提取真实邮箱地址的加密数据:
出于隐私考虑,这里使用了百度知道上公开的邮箱地址的加密字符串
import re
from urllib.parse import unquote
email_str = '71121003141403311a140210051e5f121e1c'
然后将此加密数据成对拆分为一个列表:
email_list = re.findall(r'.{2}',email_str)
提取加密字符串的密钥,即字符串的前两个字符:
key = email_list[0]
定义一个空列表来存储十六进制 XOR 运算的结果:
ll = []
遍历剩余的加密字符串,遍历过程中与key进行异或运算,将结果加入到ll列表中:
for e in email_list[1:]:
# 对十六进制进行异或运算
r = hex(int(key,16) ^ int(e,16))
ll.append(r)
然后对列表中的结果进行字符串拼接替换:
# 拼接运算后的字符串
a = ''.join(ll)
# URL解码字符串
email = unquote(a.replace('0x','%'))
这样,email 的值就是加密字符串的真实邮箱地址:
是不是很简单?
文章第一个人微信公众号和博客:/archives/269.html