我已经创建了一个脚本来从网页上抓取name并email寻址。当我运行脚本时,我得到了name相应的信息,但是在email这种情况下,我得到了aeccdcd7cfc0eedadcc783cdc1dc80cdc1c3。email每次运行脚本时,我得到的字符串(而不是字符串)都会更改。
网站连结
到目前为止,我已经尝试过:
import requests from bs4 import BeautifulSoup
url = "https://www.seafoodsource.com/supplier-directory/Tri-Cor-Flexible-Packaging-Inc"
res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"}) soup = BeautifulSoup(res.text,'lxml') name = soup.select_one("[class$='-supplier-view-main-container'] > h1").text email = soup.select_one("[class='cf_email']").get("data-cfemail") print(f'{"Name: "}{name}\n{"Email: "}{email}') 电流输出:
Name: Tri-Cor Flexible Packaging Inc Email: aeccdcd7cfc0eedadcc783cdc1dc80cdc1c3 预期产量:
Name: Tri-Cor Flexible Packaging Inc Email: bryan@tri-cor.com
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你遇到的问题是因为网页上的电子邮件地址被编码以防止直接从HTML中被爬取。data-cfemail
属性中的字符串是一种加密或混淆的形式,用于保护邮箱地址不被垃圾邮件机器人轻易获取。要解码这个字符串,你可以使用一个简单的解码方法。这个特定的编码方式通常是将字符映射到其ASCII值并进行异或操作的结果。
下面是一个解码脚本中data-cfemail
属性所含信息的方法,并结合你的代码示例:
import requests
from bs4 import BeautifulSoup
def decode_cfemail(encoded_email):
decoded_email = ""
for i in range(0, len(encoded_email), 2):
char_code = int(encoded_email[i:i+2], 16)
decoded_email += chr(char_code ^ 33)
return decoded_email.replace(';', '')
url = "https://www.seafoodsource.com/supplier-directory/Tri-Cor-Flexible-Packaging-Inc"
res = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(res.text, 'lxml')
name = soup.select_one("[class$='-supplier-view-main-container'] > h1").text
encoded_email = soup.select_one("[class='cf_email']").get("data-cfemail")
email = decode_cfemail(encoded_email)
print(f'{"Name: "}{name}\n{"Email: "}{email}')
这段代码首先定义了一个decode_cfemail
函数,它接受一个编码的电子邮件字符串作为输入,然后按照上述描述的方式解码该字符串。在你的主要逻辑中,我们调用这个函数来处理从网页上抓取的data-cfemail
值,从而得到正确的电子邮件地址。