📅  最后修改于: 2023-12-03 15:23:48.654000             🧑  作者: Mango
在网站爬虫的过程中,经常需要从页面中提取出电子邮件地址。本文将介绍不同的方法来从网站中提取出电子邮件 ID。
import re
import requests
def extract_email(url):
response = requests.get(url)
pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
emails = re.findall(pattern, response.text)
return list(set(emails))
使用正则表达式可以有效地从 HTML 中提取出电子邮件地址。上述代码中,我们使用 requests
库获取页面内容,并使用正则表达式从中提取电子邮件地址。具体来说,我们使用了 [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
的正则表达式来匹配电子邮件地址。需要注意的是,该正则表达式只是符号电子邮件地址格式的一种方式,实际场景中可能需要根据具体情况进行调整。
from bs4 import BeautifulSoup
import requests
def extract_email(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
emails = []
for link in soup.find_all('a'):
if link.get('href') is not None and 'mailto:' in link.get('href'):
emails.append(link.get('href').replace('mailto:', ''))
return emails
使用 BeautifulSoup 可以更方便地处理 HTML 页面。上述代码中,我们使用 BeautifulSoup
库获取页面内容,并遍历所有的链接。如果链接指向的是邮件地址,则将其存入列表返回。需要注意的是,该方法只能获取到页面中显式出现的邮件地址,对于 JS 动态生成的邮件地址,该方法无法获取。
除了手动编写爬虫代码外,还可以使用一些第三方工具来提取出电子邮件地址。这些工具通常具有高度的可定制性和效率,并且可以支持多种输入输出格式。
以 Scrapy 框架为例,我们可以编写以下代码来获取页面中的邮件地址:
import scrapy
class EmailSpider(scrapy.Spider):
name = "email"
start_urls = [
'http://example.com',
]
def parse(self, response):
for selector in response.css('a[href^="mailto:"]::attr(href)'):
yield {
'email': selector.extract().replace('mailto:', '')
}
这段代码可以在命令行中使用以下命令运行:
scrapy runspider email_spider.py -o emails.csv
这样就可以自动提取页面中的邮件地址并存储到 emails.csv
文件中。
本文介绍了从网站中提取电子邮件地址的三种方法:使用正则表达式、使用 BeautifulSoup 和使用第三方工具。具体的实现方式不同,但本质都是从 HTML 中提取出符合电子邮件地址格式的文本。需要注意的是,在实际场景中还需要考虑一些其他因素,如页面渲染方式、网络连接情况等等。