这里提供一种利用Python自动监控网站并发送邮件告警的方法,首先需要安装以下模块:
pip install requests
pip install beautifulsoup4
pip install schedule
pip install smtplib
Step 1: 导入模块
import requests
from bs4 import BeautifulSoup
import schedule
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
Step2: 编写函数,用于获取需要监控的网站内容
def get_website_content():
try:
url = 'http://www.example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url=url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 这里可以根据需要提取网站中的内容
# 以下代码只是示例,提取网站标题
title = soup.title.string.strip()
return title
except Exception as e:
print(e)
Step 3: 编写函数,用于发送告警邮件
def send_email():
try:
# 邮件配置
sender = 'sender@example.com'
receiver = ['receiver@example.com'] # 这里可以传入多个收件人,以列表形式传入
mail_host = 'smtp.example.com' # SMPT服务器地址
mail_port = 25 # 端口号
username = 'sender@example.com' # 发件人邮箱
password = 'password' # 邮箱密码
subject = 'Website Monitor Alert' # 邮件主题
content = 'Website is down!' # 邮件内容
# 构造邮件
message = MIMEMultipart()
text_content = MIMEText(content, 'plain', 'utf-8')
message['Subject'] = subject
message.attach(text_content)
# 发送邮件
smtp = smtplib.SMTP(host=mail_host, port=mail_port)
smtp.login(username, password)
smtp.sendmail(sender, receiver, message.as_string())
smtp.quit()
print('Email Alert Sent!')
except Exception as e:
print(e)
Step 4: 编写定时器任务,监控网站并触发告警
def monitor_website():
website_title = get_website_content()
if website_title is None or len(website_title) == 0:
send_email()
# 每5分钟监控一次,可以根据需要进行调整
schedule.every(5).minutes.do(monitor_website)
while True:
schedule.run_pending()
time.sleep(1)
以上就是一个利用Python自动监控网站并发送邮件告警的简单攻略了。以下是两个实际的示例:
示例1: 监控某在线商城的商品是否有货
假设某在线商城上有一款热门商品常常缺货,我们可以通过监控商品详情页上的“库存”信息来判断商品是否有货,当网站更新库存信息时,触发告警邮件通知我们。
def get_website_content():
try:
url = 'http://www.example.com/product/123'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url=url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 这里可以根据需要提取网站中的内容
# 以下代码只是示例,提取商品库存信息
stock = soup.find('div', {'class': 'stock'}).text.strip()
return stock
except Exception as e:
print(e)
def monitor_website():
product_stock = get_website_content()
if product_stock == '缺货':
send_email()
示例2: 监控网站是否更新
假设我们关注的是某个新闻网站的最新动态,我们可以定时地监控网站首页的更新时间,当网站更新时,触发告警邮件通知我们。
def get_website_content():
try:
url = 'http://www.example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url=url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 这里可以根据需要提取网站中的内容
# 以下代码只是示例,提取网站更新时间
update_time = soup.find('div', {'class': 'time'}).text.strip()
return update_time
except Exception as e:
print(e)
def monitor_website():
website_update_time = get_website_content()
if website_update_time != '2022-01-01 00:00:00':
send_email()
以上就是两个实际中的示例,大家可以根据实际需要进行修改和使用。