Python:从网页提取的电子邮件地址,返回额外的字符

时间:2019-02-11 01:31:28

标签: python regex email

Here是包含电子邮件地址的示例网址。 这是我正在使用的代码:

from bs4 import BeautifulSoup
import requests
import re

url = 'https://viterbi.usc.edu/directory/faculty/Zadeh/Ali-Enayat'
page_response = requests.get(url, timeout=5)
soup = BeautifulSoup(page_response.content, "html.parser")
email = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", soup.text)
print(email)

我希望它返回azadeh@usc.edu作为电子邮件地址,但它返回740-4694azadeh@usc.edu。我在做什么错,如何解决此问题,以便电子邮件提取适用于任何网页?

1 个答案:

答案 0 :(得分:2)

re的全部功能可供使用时,无需使用bs4

from bs4 import BeautifulSoup as soup
import requests
d = soup(requests.get('https://viterbi.usc.edu/directory/faculty/Zadeh/Ali-Enayat').text, 'html.parser')
email = d.find('div', {'class':'contactInformation'}).find_all('ul')[-2].find_all('li')[-1].text

输出:

'azadeh@usc.edu'

编辑:更通用的方法是将正则表达式应用于bs4对象的html内容:

re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", str(d))

输出:

['azadeh@usc.edu']