编写一个网站数据监控程序涉及多个步骤,包括环境准备、编写监控脚本、定时执行任务以及发送通知。以下是一个基本的网站数据监控程序的示例,使用Python编写,并包含了一些常见的功能,如定时检查网站状态、发送邮件通知等。
前期准备
安装所需的Python库
`requests`:用于发送HTTP请求。
`smtplib`:用于发送邮件通知。
`beautifulsoup4`:用于解析HTML内容(可选,如果需要监控网页内容变化)。
`schedule`:用于定时执行任务(可选,如果需要更灵活的调度)。
```bash
pip install requests beautifulsoup4 schedule
```
编写监控脚本
1. 检查网站状态的函数
```python
import requests
import time
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def check_website(url):
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return {
'status': response.status_code,
'response_time': round(response.elapsed.total_seconds(), 2),
'is_ok': True
}
else:
return {
'status': response.status_code,
'response_time': round(response.elapsed.total_seconds(), 2),
'is_ok': False,
'error': response.text
}
except requests.RequestException as e:
return {
'status': None,
'response_time': None,
'is_ok': False,
'error': str(e)
}
```
2. 获取网页内容
```python
def get_webpage_content(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
response = requests.get(url, headers=headers)
return response.text
```
3. 解析网页内容(可选)
```python
from bs4 import BeautifulSoup
def extract_info(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
提取所需信息,例如标题、描述等
title = soup.title.string if soup.title else "No title found"
return {'title': title}
```
4. 发送邮件通知
```python
def send_email_notification(url, status, response_time, error=None):
sender_email = "your_email@example.com"
receiver_email = "admin@example.com"
password = "your_email_password"
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = f"Website Monitoring Alert: {url}"
body = f"URL: {url}\nStatus: {status}\nResponse Time: {response_time} seconds"
if error:
body += f"\nError: {error}"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, msg.as_string())
server.quit()
```
5. 定时执行任务
```python
import schedule
import time
def monitor_website(url, interval=60):
while True:
result = check_website(url)
if not result['is_ok']:
send_email_notification(url, result['status'], result['response_time'], result.get('error', 'Unknown error'))
time.sleep(interval)
示例调用
monitor_website("https://www.example.com", 60) 每分钟检查一次
```
运行监控程序
将上述代码保存为一个Python文件(例如`website_monitor.py`),然后在终端或命令行中运行: