В моем коде Python у меня есть регулярное выражение для поиска электронной почты:
soup = BeautifulSoup(driver.page_source, "html.parser")
text_email = soup.get_text()
emails1 = re.findall(r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})', str(text_email))
Около 90% случаев этот код возвращает правильные адреса электронной почты.
Но ниже у меня есть пример того, что он возвращает формат электронной почты с ошибкой.
На веб-странице: https://s7health.pl/kontakt/
у нас есть телефон, электронная почта и текст:
71 342 88 41
[email protected]
Infolinia medyczna
исходный код над текстом:
<a class = "text-decoration-underline" href = "tel:+48713428841">71 342 88 41</a><br /><a class = "text-decoration-underline" href = "mailto:[email protected]">[email protected]</a></div><style>.porto-u-3166.porto-u-heading{text-align:left}</style></div><div class = "porto-u-heading wpb_custom_95aa9a11c17ad45cfabaf210d84ee7cc porto-u-4257"><div class = "porto-u-main-heading"><h3 style = "font-weight:700;color:#0c6d70;font-size:1em;line-height:24px;">Infolinia medyczna</h3></div>
мой код возвращает электронное письмо как: [email protected]Информация
но должен вернуть электронное письмо как: [email protected]
кроме вопроса поиска письма по фразе mailto - этой фразы может не быть, зачем в письмо добавляли дополнительные символы? Как это можно решить?
с уважением
Ваше регулярное выражение отлично работает для контента, которым вы поделились.
@GillesQuénot, я проверял это: "r'([a-zA-Z0-9._%+-]\S+@\S+[a-zA-Z0-9.-]+\.[a-zA-Z] {2,6})'", и это все равно вернуло неправильный адрес электронной почты: ['[email protected]'] . правильный ли у меня формат?
@WiktorStribiżew Я вижу вашу ссылку, но мое регулярное выражение возвращает то, что я описал
Это означает, что проблема связана с вашим str(text_email), а не с регулярным выражением.
@WiktorStribiżew я отредактировал сообщение и добавил, какой у меня text_email: суп = BeautifulSoup(driver.page_source, "html.parser") text_email =soup.get_text() - что-то не так?
Спасибо за редактирование вашего сообщения и добавление воспроизводимого кода с частью imports.






Проблема не в регулярном выражении:
from bs4 import BeautifulSoup
import requests
import re
url = 'https://s7health.pl/kontakt/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
email_regex = r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})'
email_addresses = re.findall(email_regex, response.text)
for email in email_addresses:
print(email)
Выход:
[email protected]
[email protected]
[email protected]
спасибо, выглядит красиво, мои результаты такие же, как у вас, но можно ли не возвращать строку типа: "[email protected]"?
Каково тогда правило? Что конкретно это за письмо?
Есть ли у вас более ранний код, который удаляет теги из текста? В этом случае все данные тегов между номером телефона и адресом электронной почты будут удалены, оставив строку
71 342 88 [email protected]. Ваше регулярное выражение будет отправлено[email protected]по электронной почте. Если вы анализируете HTML, вам действительно следует использовать анализатор HTML вместо регулярных выражений. См. stackoverflow.com/q/1732348/14853083