Maison > Article > développement back-end > Python surveille automatiquement les sites Web et envoie des alertes par e-mail
Avant-propos
Étant donné que certains sites Web doivent vérifier quotidiennement s'il y a des problèmes, ils ont besoin d'un mécanisme de surveillance des alarmes. Cela vous oblige à spécifier l'adresse e-mail que vous envoyez. et l'e-mail que vous recevez. Avec votre adresse e-mail, vous pouvez surveiller automatiquement le site Web.
Ce qui est utilisé ici, c'est python3.5
Plug-ins qui doivent être installés :
1. smtplib : Nécessaire pour envoyer des e-mails Allez sur
2. pycurl : Nécessaire lors de l'accès au site Web
3. linecache : Nécessaire lors de la lecture du site Web txt liste
Idées spécifiques :
Le programme python lit les informations du site Web par lots à partir de txt et utilise Curl.py pour simuler un navigateur pour y accéder le site Internet, et écrivez les résultats de la visite dans un fichier au format nom-date.txt de votre site Internet. Il existe plusieurs situations :
1 Si vous constatez qu'il ne peut pas être ouvert, envoyer un e-mail directement Demander que le site Web ne peut pas être ouvert
2. Il s'avère qu'il peut être ouvert, lisez la dernière situation d'accès dans le fichier (lisez la dernière ligne du txt fichier),
1) Si vous constatez qu'il ne peut pas être ouvert la dernière fois, envoyez un email pour vous rappeler que le site a été restauré
2) Si vous constatez qu'il peut être ouvert la dernière fois (code retour 200), il suffit d'enregistrer le journal d'accès au site Web. C'est tout
Un total de 4 fichiers
E-mail .py est une classe de messagerie, qui est principalement utilisée pour appeler lors de l'envoi d'e-mails. Ici, vous devez suivre. Dans votre cas, remplacez-la par votre adresse e-mail (msg['From']), l'adresse du serveur de messagerie (adresse SMTP) et votre. mot de passe de messagerie (SMTP.login)
Email.py
#!/usr/bin/python #-*- coding:utf-8 -*- import sys import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Email_send(object): def __init__(self,msgTo,data2,Subject): self.msgTo=msgTo self.data2=data2 self.Subject=Subject def sendEmail(self): # (attachment,html) = content msg = MIMEMultipart() msg['Subject'] = self.Subject msg['From'] = 'xxxx@xxxx.com.cn' msg['To'] = self.msgTo html_att = MIMEText(self.data2, 'html', 'utf-8') #att = MIMEText(attachment, 'plain', 'utf-8') msg.attach(html_att) #msg.attach(att) try: smtp = smtplib.SMTP() smtp.connect('smtp.xxxx.com', 25) smtp.login(msg['From'], 'xxxx') #改成自己的邮箱密码 smtp.sendmail(msg['From'], msg['To'].split(','), msg.as_string()) return('邮件发送成功') except Exception as e: print('--------------sss------',e) def curl(self): import pycurl c=pycurl.Curl() #url="www.luoan.com.cn" #indexfile=open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb") c.setopt(c.URL,url) c.setopt(c.VERBOSE,1) c.setopt(c.ENCODING,"gzip") #模拟火狐浏览器 c.setopt(c.USERAGENT,"Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0") return c
Curl.py est un fichier principalement utilisé pour exécuter des visites simulées de navigateur sur des sites Web et renvoyer des résultats
#!/usr/bin/python #-*- coding:utf-8 -*- import sys import pycurl class Curl(object): def __init__(self,url): self.url=url def Curl_site(self): c=pycurl.Curl() #url="www.luoan.com.cn" #indexfile=open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb") c.setopt(c.URL,self.url) c.setopt(c.VERBOSE,1) c.setopt(c.ENCODING,"gzip") #模拟火狐浏览器 c.setopt(c.USERAGENT,"Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0") return c
site_moniter.py Ce fichier est le programme principal . Il exécute principalement la fonction d'appel ci-dessus et lit la liste des sites Web dans le fichier txt. Si le site Web ne peut pas être ouvert, envoyez Une alerte sort de l'e-mail
Veuillez noter :
1. Remplacez xxxx@xxxx.com par votre propre adresse e-mail, 2. Remplacez le chemin du fichier par votre chemin réel#!/usr/bin/python #-*- coding:utf-8 -*- import pycurl import os import sys import linecache import time #引入事件类,用来获取系统当前时间 #from ceshi import Student from Email import Email_send from Curl import Curl #bart = Student('mafei',59) #bart.print_score() def script(urls,type): msgTo = 'xxxx@xxxx.com' now_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) j=1 # data2=[{'aa':'aa'}] for url_split in urls: #print(url_split) url_1=url_split.split('---') url=url_1[1] recovery_title = "监控通知----%s url:%s" % (url_1[0], url) + "在" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) + "已经恢复" down_title = "监控通知----%s url:%s" % (url_1[0], url) + "在" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) + "无法打开" #print('~~~~~~~~~~~~~~~~~~~') #print(url) #引用爬去网站的类,调用结果 url_result = Curl(url) c = url_result.Curl_site() try: c.perform() code = str(c.getinfo(c.HTTP_CODE)) print(code+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') except Exception as e: print('--------错误信息:--------',e) #indexfile.close() #c.close() code = str(c.getinfo(c.HTTP_CODE)) # print(code+'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') filename = '%s-%s.txt' % (url_1[0], time.strftime("%Y-%m-%d", time.localtime(time.time()))) #判断如果在网站无法打开的情况下 if code == '0' or code=='400' or code=='500' or code=='404': resolveTime = 0 Connection_Time = 0 Transfer_Total_Time = 0 Total_Time = 0 # print('为000000000000000000000000000000000000000000') data3 = '网站:%s无法打开%s' % (url_1[0], url) # indexfile.close() # c.close() #判断网站如果挂了就发邮件 stat3 = Email_send(msgTo, data3, down_title) resole=stat3.sendEmail() print(resole) print(data3 + '邮件已经发送') else: #resolveTime = str(c.getinfo(c.NAMELOOKUP_TIME) * 1000) + " ms" # Connection_Time=str(float(c.getinfo(c.CONNECT_TIME)*1000-c.getinfo(c.NAMELOOKUP_TIME)*1000))+" ms" #Connection_Time = str(c.getinfo(c.CONNECT_TIME) * 1000 - c.getinfo(c.NAMELOOKUP_TIME) * 1000) + " ms" # Connection_Time=round(float(Connection_Time)) #Transfer_Total_Time = str(c.getinfo(c.TOTAL_TIME) * 1000 - c.getinfo(c.PRETRANSFER_TIME) * 1000) + " ms" #Total_Time = str(c.getinfo(c.TOTAL_TIME) * 1000) + " ms" # data2=data # data={'url':url,'HTTP CODE':code,'resolveTime':resolveTime,'Connection_Time':Connection_Time,'Transfer_Total_Time':Transfer_Total_Time,'Total_Time':Total_Time} print('网站可以正常打开') #f = open(filename, 'a',encoding='utf-8') file_exit=os.path.exists(filename) #print(file_exit) #判断这个日志文件存不存在 if(file_exit): #读取文件最后一行,为了读取出来最后一次的状态值 file = open(filename, 'r',encoding='utf-8') linecount = len(file.readlines()) data = linecache.getline(filename, linecount) file.close if data == '': print('这是'+data+'为空的数据') else: print('其他信息%s'%(data)) explode = data.split('----') #判断如果读取出来的值,最后一次是异常的情况就告警 if explode[3]=='0\n' or explode[3]=='400\n' or explode[3]=='500' or explode[3]=='404': data3 = '网站:%s在%s已经恢复%s' % (url_1[0], now_time,url) stat3 = Email_send(msgTo, data3, recovery_title) resole = stat3.sendEmail() print(resole) print(data3 + '邮件已经发送') else: print('最后一次记录为其他值:%s'%(explode[3])+'-----') else: print('文件不存在') data2 = '\n' + url_1[0] + '----' + url + '-----' + time.strftime("%H:%M:%S", time.localtime(time.time())) + '-------' + code print('data2数据写入成功:' + data2) file = open(filename, 'a', encoding='utf-8') file.write(data2) file.close # bart = Student(data2,59) # bart.print_score() if __name__ == "__main__": type = "监控通知-测试" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) data1=['公司门户---www.luoan.com.cn','公司平台---yun.luoan.com.cn'] #script(data1,type) #中心层面的网站清单 file=open('D:\python\site_moniter\zhongxin.txt') data2=[] while 1: line2 =file.readline() print(line2) if not line2: break data2.append(line2[0:-1]) #data2=['www.luoan.com.cn','yun.luoan.com.cn','www.qq.com'] print(data2) title="监控通知-中心"+ time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) script(data2,title)
Résumé
Utilisation C'est fondamentalement la fin de la méthode Python de surveillance automatique des sites Web et d'envoi d'alertes par e-mail. J'espère que cela sera utile. au travail d'apprentissage de chacun. Pour plus d'articles liés à la surveillance automatique des sites Web par Python et à l'envoi d'alertes par e-mail, veuillez faire attention au site Web PHP chinois !