Не удается получить определенный элемент с веб-страницы с помощью запросов - PullRequest
0 голосов
/ 28 сентября 2019

Я создал скрипт для очистки адреса 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

PS Мне не нужно решение, связанное с каким-либо симулятором браузера, как в селене.

Как я могу получить это письмо с этой страницы, используя запросы?

1 Ответ

4 голосов
/ 29 сентября 2019

Вы должны декодировать электронную почту.

import requests
from bs4 import BeautifulSoup

def cfDecodeEmail(encodedString):
    r = int(encodedString[:2],16)
    email = ''.join([chr(int(encodedString[i:i+2], 16) ^ r) for i in range(2, len(encodedString), 2)])
    return email

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 = cfDecodeEmail(soup.select_one("[class='__cf_email__']").get("data-cfemail"))
print(f'{"Name: "}{name}\n{"Email: "}{email}')

Вывод:

Name: Tri-Cor Flexible Packaging Inc
Email: bryan@tri-cor.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...