Maison développement back-end Tutoriel Python Python surveille automatiquement les sites Web et envoie des alertes par e-mail

Python surveille automatiquement les sites Web et envoie des alertes par e-mail

Feb 25, 2017 am 10:12 AM

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
Copier après la connexion

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
Copier après la connexion

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(&#39;mafei&#39;,59)
#bart.print_score()

def script(urls,type):
 msgTo = &#39;xxxx@xxxx.com&#39;
 now_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
 j=1
#  data2=[{&#39;aa&#39;:&#39;aa&#39;}]
 for url_split in urls:
  #print(url_split)
  url_1=url_split.split(&#39;---&#39;)
  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(&#39;~~~~~~~~~~~~~~~~~~~&#39;)
  #print(url)
  #引用爬去网站的类,调用结果
  url_result = Curl(url)
  c = url_result.Curl_site()
  try:
   c.perform()
   code = str(c.getinfo(c.HTTP_CODE))
   print(code+&#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;)
  except Exception as e:
   print(&#39;--------错误信息:--------&#39;,e)
   #indexfile.close()
   #c.close()
  code = str(c.getinfo(c.HTTP_CODE))
  # print(code+&#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;)
  filename = &#39;%s-%s.txt&#39; % (url_1[0], time.strftime("%Y-%m-%d", time.localtime(time.time())))
  #判断如果在网站无法打开的情况下
  if code == &#39;0&#39; or code==&#39;400&#39; or code==&#39;500&#39; or code==&#39;404&#39;:
   resolveTime = 0
   Connection_Time = 0
   Transfer_Total_Time = 0
   Total_Time = 0
   # print(&#39;为000000000000000000000000000000000000000000&#39;)
   data3 = &#39;网站:%s无法打开%s&#39; % (url_1[0], url)
   # indexfile.close()
   # c.close()
   #判断网站如果挂了就发邮件
   stat3 = Email_send(msgTo, data3, down_title)
   resole=stat3.sendEmail()
   print(resole)
   print(data3 + &#39;邮件已经发送&#39;)
  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={&#39;url&#39;:url,&#39;HTTP CODE&#39;:code,&#39;resolveTime&#39;:resolveTime,&#39;Connection_Time&#39;:Connection_Time,&#39;Transfer_Total_Time&#39;:Transfer_Total_Time,&#39;Total_Time&#39;:Total_Time}
   print(&#39;网站可以正常打开&#39;)
   #f = open(filename, &#39;a&#39;,encoding=&#39;utf-8&#39;)
   file_exit=os.path.exists(filename)
   #print(file_exit)
   #判断这个日志文件存不存在
   if(file_exit):
    #读取文件最后一行,为了读取出来最后一次的状态值
    file = open(filename, &#39;r&#39;,encoding=&#39;utf-8&#39;)
    linecount = len(file.readlines())
    data = linecache.getline(filename, linecount)
    file.close
    if data == &#39;&#39;:
     print(&#39;这是&#39;+data+&#39;为空的数据&#39;)
    else:
     print(&#39;其他信息%s&#39;%(data))
     explode = data.split(&#39;----&#39;)
     #判断如果读取出来的值,最后一次是异常的情况就告警
     if explode[3]==&#39;0\n&#39; or explode[3]==&#39;400\n&#39; or explode[3]==&#39;500&#39; or explode[3]==&#39;404&#39;:
      data3 = &#39;网站:%s在%s已经恢复%s&#39; % (url_1[0], now_time,url)
      stat3 = Email_send(msgTo, data3, recovery_title)
      resole = stat3.sendEmail()
      print(resole)
      print(data3 + &#39;邮件已经发送&#39;)
     else:
      print(&#39;最后一次记录为其他值:%s&#39;%(explode[3])+&#39;-----&#39;)
   else:
    print(&#39;文件不存在&#39;)
  data2 = &#39;\n&#39; + url_1[0] + &#39;----&#39; + url + &#39;-----&#39; + time.strftime("%H:%M:%S", time.localtime(time.time())) + &#39;-------&#39; + code
  print(&#39;data2数据写入成功:&#39; + data2)
  file = open(filename, &#39;a&#39;, encoding=&#39;utf-8&#39;)
  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=[&#39;公司门户---www.luoan.com.cn&#39;,&#39;公司平台---yun.luoan.com.cn&#39;]
 #script(data1,type)


 #中心层面的网站清单
 file=open(&#39;D:\python\site_moniter\zhongxin.txt&#39;)
 data2=[]
 while 1:
  line2 =file.readline()
  print(line2)
  if not line2:
   break
  data2.append(line2[0:-1])
 #data2=[&#39;www.luoan.com.cn&#39;,&#39;yun.luoan.com.cn&#39;,&#39;www.qq.com&#39;]
 print(data2)
 title="监控通知-中心"+ time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
 script(data2,title)
Copier après la connexion

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 !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Apr 01, 2025 pm 11:15 PM

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Apr 02, 2025 am 07:18 AM

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Apr 02, 2025 am 07:15 AM

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Que sont les expressions régulières? Que sont les expressions régulières? Mar 20, 2025 pm 06:25 PM

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Apr 01, 2025 pm 10:51 PM

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Quelles sont les bibliothèques Python populaires et leurs utilisations? Quelles sont les bibliothèques Python populaires et leurs utilisations? Mar 21, 2025 pm 06:46 PM

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Apr 01, 2025 pm 11:18 PM

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

See all articles