我需要从此页面(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()执行相同的任务。有人可以帮忙吗?
答案 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
中的电子邮件地址。