使用Python监控网站正常运行时间监视器的SEO指南

今天是星期天晚上。你躺在床上。你知道你的网站是否启动了吗?

在这个中级教程中,我将向您展示如何使用 Python 创建和自动化带有电子邮件通知的简单正常运行时间监视器。对于历史分析,稍后我们将数据存储在 MySQL 中。除了检测站点是启动还是关闭之外,我们还将获取一些快速数据和基本的TLS / SSL验证。

注意: 下面的某些代码中存在占位符,您需要在其中填写环境的详细信息。

要求和假设

  • 访问Linux安装(我推荐Ubuntu)并了解基本的终端功能

  • 已安装 Python 3 并理解基本的 Python 语法

  • 在本地或外部访问 MySQL 数据库

导入必要的模块

Python 模块就像其他编码语言中的库。它们是预制函数的集合,您可以使用它们通过不重新发明轮子来节省时间。我们将要使用的大多数Python模块都应该预装,但有三个没有预装的是fake_useragent,yagmailmysql.connector。请务必阅读yagmail上的文档,其中有一点配置。非常容易。要安装这些命令,请转到命令终端并键入以下两个命令:

pip3 install mysql.connector

pip3 install fake_useragent

pip3 install yagmail

如果您收到有关其他缺少模块的任何错误,则可以使用上面的相同代码来安装其余模块。只需确保将最后一部分替换为新模块的名称即可。有时名称不明显;您可以在此处搜索模块名称。

创建 MySQL 表

首先,我们需要设置存储监视数据的数据库。有两种常见的方法来访问和管理MySQL:通过命令终端和通过cPanel的phpMyAdmin GUI。

选项 1 – 命令行终端:

如果您没有cPanel或在终端中最舒适,请按照本指南登录MySQL以创建数据库和用户。然后,运行下面的 SQL 语句来创建表。

选项 2 – phpMyAdmin:

如果您有权访问cPanel,则可以在MySQL数据库区域中创建数据库和用户。之后,转到phpMyAdmin(也可以在cPanel中找到)。从左侧列表中选择数据库。在顶部的“SQL”选项卡中,输入以下 SQL 语句以创建包含要监视的网站的表。如果您已经根据我以前的指南之一创建了此表,则可以改用该表。

CREATE TABLE websites (

websiteid int NOT NULL AUTO_INCREMENT,

name varchar(255),

url varchar(255),

PRIMARY KEY (websiteid )

);

此时,您的网站 (URL) 将有一个空表。当然,您会希望此表填充要监视的 URL 数量。我通常只关注主页。如果您在phpMyAdmin中创建了表,则可以在左侧列中选择它,然后选择顶部的“插入”。为您要监控的每个网站填写该表单。

您也可以通过SQL插入网站记录,如下所示(网站ID是自动生成的):

INSERT INTO websites (name,url) VALUES ("Rocket Clicks","https://www.rocketclicks.com")

接下来,我们准备使用以下 SQL 语句为监视数据创建表:

CREATE TABLE uptime (

scanid int NOT NULL AUTO_INCREMENT,

websiteid int(255),

date varchar(255),

time varchar(255),

status_code int(255),

speed float(255),

cert_valid int(255),

PRIMARY KEY (scanid)

);

准备好脚本

启动您最喜欢的代码编辑器或 IDE。我推荐PyCharm给更有经验的程序员

将下面的代码放在文件的第一行。它被称为shebang或hashbang,告诉Linux如何执行文件。这通常是可选的,但在从 cronjob 运行时是必需的,我们稍后会这样做。这告诉Linux使用Python 3运行。

#!/usr/bin/python3

首先,让我们导入我们将要使用的 Python 模块。

## Get today's date

from datetime import date

## Get today's time

from datetime import datetime

## For header info

import requests

## For time delay

import time

## To connec to mysql

import mysql.connector

## Generate random valid user agents for request

from fake_useragent import UserAgent

## For email notifications

import yagmail

从这里开始,我们将在创建两个函数时稍微向后工作。一个用于处理网站请求,另一个用于写入 MySQL。

让我们从创建我们的 uptime() 函数开始,该函数将请求网站为其服务器并记录交互。此函数将接收 3 个变量、URL、名称和标头信息。对于我们对网站的请求,我们将使用 Try/Except ,因为我们使用的是请求函数的 verify 属性并将其设置为 True。这将验证 TLS 证书并防止您扫描恶意 URL。如果您确定要扫描的站点的安全性,则可以将其设置为 False。如果设置为 True 并且 URL 的证书无效,则会引发错误,脚本将停止。我们使用 Try/except 来记录事件,即使在出现错误后也继续。

def uptime(url,name,header):

try:

response = requests.get(url,headers=header,verify=True)

except:

gettime = "n/a"

status_code_num = "n/a"

cert_valid = "1"

return status_code_num,gettime,cert_valid

继续在 uptime() 函数中,我们将从刚刚创建的响应对象中获取status_code。然后,我们测试该状态代码是否是成功的 200 响应。如果是,我们将利用 elapsed_time 属性下载 URL 文件内容(源代码)所花费的时间。如果不是 200,我们将跳过获取速度数据。

status_code_num = response.status_code

if response.status_code == 200:

gettime = round(response.elapsed.total_seconds(),2)

else:

gettime = 0

return status_code_num,gettime, cert_valid

现在我们创建函数来存储来自 uptime() 函数的数据。我们可以在此处生成时间和日期,这对于跟踪停机原因很重要。我们构建 SQL 语句并执行它以插入记录。

def writetolog(websiteid,name,status_code_num,gettime,cert_valid):

now = datetime.now()

today = date.today()

getnow = now.strftime('%H:%M')

getdate = today.strftime('%m/%d/%Y')

mydb = mysql.connector.connect(port="3306", host="HOSTIP",user="USER",password="PASSWORD", database="DATABASE")

cursor = mydb.cursor()

new_scan = "INSERT INTO uptime (websiteid,date,time,code,speed,cert_valid) VALUES ('" + str(websiteid) + "','" + getdate + "','" + getnow + "','" + str(status_code_num) + "','" + str(gettime) + "','" +str(cert_valid)+ "')"

print(new_scan)

cursor.execute(new_scan)

写入日志记录后,让我们检查状态代码是否为 200 或是否存在证书问题,如果没有,请发送站点已关闭的通知!请务必使用之前使用 yagmail 配置的那个更改YOUR_GMAIL_ADDRESS。然后将TO_GMAIL_ADDRESS替换为应接收通知的电子邮件地址。您可以使用 if/then 轻松扩展它,以便在消息关闭或证书问题时更改消息。大多数情况下,如果出现严重的证书问题,浏览器会提醒用户并询问他们是否要继续。

if status_code_mum != 200 or cert_valid == 1:

body = "Your website: "+url+"Is DOWN! \n\n"

body += str(response.text.encode('utf8'))

yag = yagmail.SMTP("YOUR_GMAIL_ADDRESS")

yag.send(

to="TO_EMAIL_ADDRESS",

subject=name + " is Down or there is a TLS certificate issue!",

contents=body

)

这是脚本实际开始的地方。首先从数据库生成网站 URL 列表。填写 mydb 变量的连接信息。您会看到我创建了另一个数据库连接。如果有人知道我是否可以将 mydb 和光标传递给 writetolog 函数,请告诉我!继续前进,我们开始循环浏览我们的网站记录。我们获取网站ID名称和URL。我包含一个注释掉的行,您可以在其中确保 URL 变量包含无法测试停机时间功能的 URL。

mydb = mysql.connector.connect(port="3306", host="IP",user="USER",password="PASSWORD", database="DBNAME")

new_scan = "SELECT * FROM websites"

cursor = mydb.cursor()

cursor.execute(new_scan)

records = cursor.fetchall()

for row in records:

websiteid = str(row[0])

name = str(row[1])

url = str(row[2])

#url = "https://expired.badssl.com/" ### For downtime testing

接下来,我们调用 fake_useragent 函数来生成 Chrome 用户代理,并将 URL、名称和标头传递到我们之前创建的 uptime() 函数中。uptime() 函数运行后,它返回状态代码、速度和证书状态。然后它将所有这些信息传递到我们已经创建的 writetolog() 函数中,并存储记录!

ua = UserAgent()

header = {

'User-Agent': ua.chrome

}

status_code_num, gettime, cert_valid = uptime(url,name,header)

writetolog(websiteid,name,status_code_num,gettime, cert_valid)

mydb.close()

自动扫描

如果您的正常运行时间 Python 脚本在手动运行时运行良好,那么是时候自动化它了。幸运的是,Linux 已经通过使用 crontab 为我们提供了一个解决方案。crontab 存储脚本条目,您可以在其中指定何时执行它们(如调度程序)。在如何安排脚本(一天中的任何时间、星期几、月中的某一天等)方面,您有很大的灵活性。要将条目添加到 crontab,请运行以下命令:

crontab -e

它可能会在 vi 编辑器中打开 crontab 文件。在文件底部的空白行上,键入下面的代码。此代码将在每周日的午夜运行脚本。要将时间更改为其他时间,请使用此 cronjob 时间编辑器。使用脚本路径进行自定义。

0 0 * * SUN /usr/bin/python3 PATH_TO_SCRIPT/filename.py

如果要创建日志文件以记录每次运行脚本的时间,可以改用该文件。使用脚本路径进行自定义。

0 0 * * SUN /usr/bin/python3 PATH_TO_SCRIPT/filename.py > PATH_TO_FILE/FILENAME.log 2>&1

保存 crontab 文件,您就可以开始了!请注意,在 cronjob 设置为运行时,您的计算机需要处于打开状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值