使用BS4和Regex从网站抓取电子邮件地址

时间:2020-05-13 06:55:43

标签: python regex web-scraping beautifulsoup

我需要从此页面(https://www.math.princeton.edu/people/graduate-students)抓取应届毕业生的电子邮件地址。

我使用了re.findall,它工作正常(请参见下面的代码):

from bs4 import BeautifulSoup as soup
import re

clg = urlopen('https://www.math.princeton.edu/people/graduate-students')
bsobj = soup(clg.read())
reobj = re.compile(r"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}\b", re.IGNORECASE)
re.findall(reobj, bsobj.decode('utf-8'))

现在,我需要使用bs4 find()或findAll()执行相同的任务。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您正则表达式发现重复项。这是使用BeautifulSoup(并且没有重复项)的方法。

emails = [x.a.text for x in bsobj.find_all('div', {'class': 'views-field views-field-field-email'})]

首先,我们找到将类属性设置为div的每个views-field views-field-field-email。该div包含电子邮件地址,您可以在网页的html中看到。然后,我们获得标记a,其中包含来自所有div的text中的电子邮件地址。