在带有bs4的python中使用正则表达式从脚本内抓取电子邮件地址

时间:2019-03-03 07:04:48

标签: python regex web-scraping beautifulsoup find

我正在尝试从电子邮件嵌套在脚本中的网站上抓取电子邮件地址,而简单的“ find / findAll + .text”并不能解决问题。

源html:

<script>EMLink('com','aol','mikemhnam','<div class="emailgraphic"><img style="position: relative; top: 3px;" src="https://www.naylornetwork.com/EMailProtector/text-gif.aspx?sx=com&nx=mikemhnam&dx=aol&size=9&color=034af3&underline=yes" border=0></div>','pcoc.officialbuyersguide.net Inquiry','onClick=\'$.get("TrackLinkClick", { LinkType: "Email", LinkValue: "mikemhnam@aol.com", MDSID: "CPC-1210", AdListingID: "" });\'')</script> <br/>

我目前的方法是尝试这样的“ findAll +”正则表达式:

for email in soup.findAll(class_='ListingPageNameAddress NONE'):
    print(email.findAll("([\w\._]+\@([\w_]+\\.)+[a-zA-Z]+)"))

但是在jupyter中,这仅返回[] :/

正则表达式是否存在问题,或者是尝试在此处整理电子邮件的更简单方法?

2 个答案:

答案 0 :(得分:1)

尽管正则表达式随着时间的推移可能会更强大,但根据我的经验,脚本标记的这些部分仍保持不变,因此请考虑使用split的计划B

html ='''

<script>EMLink('com','aol','mikemhnam','<div class="emailgraphic"><img style="position: relative; top: 3px;" src="https://www.naylornetwork.com/EMailProtector/text-gif.aspx?sx=com&nx=mikemhnam&dx=aol&size=9&color=034af3&underline=yes" border=0></div>','pcoc.officialbuyersguide.net Inquiry','onClick=\'$.get("TrackLinkClick", { LinkType: "Email", LinkValue: "mikemhnam@aol.com", MDSID: "CPC-1210", AdListingID: "" });\'')</script>
<br/>

'''

print(html.split('LinkValue: "')[1].split('"')[0])

答案 1 :(得分:0)

您似乎未使用正确的findall方法。您需要先import re,然后使用findall()方法,而不是findAll()方法(请注意字母“ A”的大小写差异)。该函数的界面为:

re.findall(pattern, string, flags=0)

有关详细信息,请参见re文档的this section,以查找所有副词。