开发者社区 问答 正文

使用请求无法从网页中获取某项

我已经创建了一个脚本来从网页上抓取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

展开
收起
被纵养的懒猫 2019-10-08 17:03:42 409 分享 版权
阿里云 AI 助理回答

你遇到的问题是因为网页上的电子邮件地址被编码以防止直接从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值,从而得到正确的电子邮件地址。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: