Beautiful Soup - 提取邮箱ID



从网页中提取电子邮件地址是BeautifulSoup等网页抓取库的一个重要应用。在任何网页中,邮箱ID通常出现在锚标签<a>的href属性中。邮箱ID使用mailto URL方案编写。很多时候,邮箱地址可能作为普通文本(没有任何超链接)出现在页面内容中。本章,我们将使用BeautifulSoup库通过简单的技术从HTML页面获取邮箱ID。

邮箱ID在href属性中的典型用法如下:

<a href = "mailto:xyz@abc.com">test link</a>

在第一个示例中,我们将考虑以下HTML文档,从中提取超链接中的邮箱ID:

<html>
   <head>
      <title>BeautifulSoup - Scraping Email IDs</title>
   </head>
   <body>
      <h2>Contact Us</h2>
      <ul>
      <li><a href = "mailto:sales@company.com">Sales Enquiries</a></li>
      <li><a href = "mailto:careers@company.com">Careers</a></li>
      <li><a href = "mailto:partner@company.com">Partner with us</a></li>
      </ul>
   </body>
</html>

以下是查找邮箱ID的Python代码。我们收集文档中的所有<a>标签,并检查该标签是否具有href属性。如果是,则其值从第6个字符之后的部分就是邮箱ID。

from bs4 import BeautifulSoup
import re
fp = open("contact.html")
soup = BeautifulSoup(fp, "html.parser")
tags = soup.find_all("a")
for tag in tags:
   if tag.has_attr("href") and tag['href'][:7]=='mailto:':
      print (tag['href'][7:])

对于给定的HTML文档,邮箱ID将按如下方式提取:

sales@company.com
careers@company.com
partner@company.com

在第二个示例中,我们假设邮箱ID出现在文本的任何位置。为了提取它们,我们使用正则表达式搜索机制。正则表达式是一种复杂的字符模式。Python的re模块有助于处理正则表达式模式。以下正则表达式模式用于搜索邮箱地址:

pat = r'[\w.+-]+@[\w-]+\.[\w.-]+'

在本练习中,我们将使用以下HTML文档,其中邮箱ID位于<li>标签中。

<html>
   <head>
      <title>BeautifulSoup - Scraping Email IDs</title>
   </head>
   <body>
      <h2>Contact Us</h2>
      <ul>
      <li>Sales Enquiries: sales@company.com</a></li>
      <li>Careers: careers@company.com</a></li>
      <li>Partner with us: partner@company.com</a></li>
      </ul>
   </body>
</html>

使用邮箱正则表达式,我们将找到该模式在每个<li>标签字符串中的出现。以下是Python代码:

示例

from bs4 import BeautifulSoup
import re

def isemail(s):
   pat = r'[\w.+-]+@[\w-]+\.[\w.-]+'
   grp=re.findall(pat,s)
   return (grp)

fp = open("contact.html")
soup = BeautifulSoup(fp, "html.parser")
tags = soup.find_all('li')

for tag in tags:
   emails = isemail(tag.string)
   if emails:
      print (emails)

输出

['sales@company.com']
['careers@company.com']
['partner@company.com']

使用上述简单的技术,我们可以使用BeautifulSoup从网页中提取邮箱ID。

广告
© . All rights reserved.