使用bs4在python中使用regex从脚本中搜索电子邮件地址

问题描述 投票:-1回答:2

我正试图从电子邮件嵌套在脚本中的网站上抓取电子邮件地址,而简单的“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: "[email protected]", MDSID: "CPC-1210", AdListingID: "" });\'')</script> <br/>

我目前的方法是尝试一个“findAll +”正则表达式,如下所示:

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

但在jupyter这只返回一个[] :/

是否有正则表达式的问题或更简单的方法来尝试梳理这里的电子邮件?

python regex web-scraping beautifulsoup find
2个回答
1
投票

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

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: "[email protected]", MDSID: "CPC-1210", AdListingID: "" });\'')</script>
<br/>

'''

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

0
投票

您似乎没有使用正确的findall方法。你需要import re然后使用findall()方法,而不是findAll()方法(注意字母“A”的大小写差异)。该功能的界面是:

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

有关详细信息,请参阅this section doc的re查找所有副词。

© www.soinside.com 2019 - 2024. All rights reserved.