使用requests模块提取网页加密邮箱失败,求解码方法
解密网页加密邮箱的Python实现
问题描述
从网页https://global-standard.org/find-suppliers-shops-and-inputs/certified-suppliers/database/search_result/38996提取邮箱时,邮箱被加密处理无法直接抓取。执行原有代码后仅得到加密调用语句:
emailProtector.addCloakedMailto("ep_586c4771", 1);
需要还原出目标邮箱fttextilegroup2017@gmail.com。
解决方案
这类邮箱加密通常将邮箱拆分为用户名和域名两部分,存储在对应元素的HTML属性中,通过前端JS动态拼接显示。只需提取这些属性并拼接即可还原邮箱。
实现代码
import requests from bs4 import BeautifulSoup link = 'https://global-standard.org/find-suppliers-shops-and-inputs/certified-suppliers/database/search_result/38996' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', } # 请求网页 res = requests.get(link, headers=headers) soup = BeautifulSoup(res.text, "html.parser") # 定位加密邮箱的容器元素(ID对应加密调用中的ep_xxx) email_element = soup.find(id="ep_586c4771") # 提取存储邮箱的属性值 username = email_element.get("data-name") domain = email_element.get("data-domain") # 拼接为完整邮箱 target_email = f"{username}@{domain}" print(target_email) # 输出:fttextilegroup2017@gmail.com
原理说明
网页中的emailProtector脚本会通过addCloakedMailto方法,从指定ID的元素的data-name和data-domain属性中读取邮箱片段,动态拼接成完整邮箱并渲染。我们直接提取这两个属性值,就能绕过JS解密过程,直接得到原始邮箱。
内容的提问来源于stack exchange,提问作者SMTH
相关产品推荐
相关产品推荐

