📌  相关文章
📜  查找电子邮件地址 pytho - Python (1)

📅  最后修改于: 2023-12-03 14:55:35.338000             🧑  作者: Mango

查找电子邮件地址 Python

在Python中查找电子邮件地址并非一件困难的事情。下面我们来分享一些实用的代码片段和技巧。

正则表达式

首先,您可以使用正则表达式来匹配电子邮件地址。以下是一个简单的例子:

import re

text = "联系我们: example123@example.com"
regex_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
email_addresses = re.findall(regex_pattern, text)
print(email_addresses)

输出:

['example123@example.com']

代码片段解释:

  • re.findall()会返回一个列表,其中包含正则表达式匹配的所有字符串。
  • 正则表达式r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'的含义如下:
    • \b表示单词的边界。
    • [A-Za-z0-9._%+-]+表示允许的字符范围,即字母、数字和一些特殊字符(点、下划线、百分号、加号和减号)。加号表示可以重复多次。
    • @表示电子邮件地址的分隔符。
    • [A-Za-z0-9.-]+表示域名,例如example.com。点和减号也是允许的。
    • \.表示域名中的点。由于.在正则表达式中有特殊含义,因此需要用\进行转义。
    • [A-Z|a-z]{2,}表示顶级域名(例如.com)的字符范围,大写或小写字母都可以,至少为两个字符。
    • \b表示单词的边界。
BeautifulSoup

另一个常用的工具是BeautifulSoup库。以下是一个使用BeautifulSoup查找电子邮件地址的例子:

from bs4 import BeautifulSoup
import requests
import re

url = 'https://www.example.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
email_addresses = set()
regex_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

for link in soup.find_all('a'):
    href = link.get('href')
    if href and 'mailto:' in href:
        email_addresses.add(href.replace('mailto:', ''))
    elif href:
        response = requests.get(href)
        soup = BeautifulSoup(response.text, 'html.parser')
        email_addresses.update(set(re.findall(regex_pattern, str(soup))))
print(email_addresses)

输出:

{'info@example.com', 'support@example.com', 'contact@example.com'}

代码片段解释:

  • 首先使用requests库从网页中获取HTML文本。
  • 然后使用BeautifulSoup将网页文本解析为树形结构,方便对其中的元素进行搜索。
  • 使用find_all()方法找到所有的<a>标签,并从中抽取href属性值。
  • 如果href属性值中包含'mailto:'字符串,则从中提取电子邮件地址,并添加到列表中。
  • 如果href属性值不包含'mailto:'字符串,则使用requests库请求链接,并使用正则表达式提取其中的电子邮件地址。并将找到的电子邮件地址合并到列表中。
使用第三方库

最后,您也可以使用第三方库来发送电子邮件。以下是发送电子邮件的一个例子:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

from_addr = "sender@example.com"
to_addr = "recipient@example.com"
password = "mypassword"

msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = to_addr
msg['Subject'] = "Test email with attachment"

body = "This is an email with attachment in Python"
msg.attach(MIMEText(body, 'plain'))

filename = "example.txt"
attachment = open(filename, 'rb')

part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

msg.attach(part)

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(from_addr, password)
text = msg.as_string()
server.sendmail(from_addr, to_addr, text)
server.quit()

print("Email sent with attachment!")

代码片段解释:

  • 首先导入需要的模块和类。
  • 然后设置发送方和接收方的电子邮件地址。
  • 创建一个MIMEMultipart对象,并向其中添加主题和正文。
  • 通过使用open()和read()方法,创建一个MIMEBase对象,并将其作为附件添加到MIMEMultipart对象中。
  • 如果需要使用密码登录,请创建SMTP对象并调用starttls()方法进行加密。然后调用login()方法进行身份验证。
  • 调用as_string()方法将MIMEMultipart对象转换为字符串,并将其作为电子邮件正文发送。
  • 最后,调用SMTP对象的quit()方法关闭连接。

以上是Python中查找电子邮件地址的一些技巧。希望这些代码片段可以帮助您更好地处理电子邮件地址的相关问题。