📅  最后修改于: 2023-12-03 14:55:35.338000             🧑  作者: Mango
在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查找电子邮件地址的例子:
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'}
代码片段解释:
<a>
标签,并从中抽取href属性值。最后,您也可以使用第三方库来发送电子邮件。以下是发送电子邮件的一个例子:
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!")
代码片段解释:
以上是Python中查找电子邮件地址的一些技巧。希望这些代码片段可以帮助您更好地处理电子邮件地址的相关问题。