一个检测网页是否有日常链接的python脚本

     在大的互联网公司干技术的基本都会碰到测试、预发布、线上这种多套环境的,来实现测试和线上正式环境的隔离,这种情况下,就难免会碰到秀逗了把测试的链接发布到线上的情况,一般这种都是通过一些测试的检查工具来检查链接来规避风险的。前两天跟了一个问题也是这个情况,开发疏忽把日常url发布到线上了。但是测试那边没有自动化的监控工具,导致没有及时发现,由于最近正好在看python,后来处理完回家就想用python做个简单的监控。

     大略思路是:用python写一个脚本来分析网页里的所有url,看是否包含日常的链接,然后把脚本放到crontab里跑定时任务,10分钟跑一次检查。如果发现非法链接,就发告警邮件给相关人员。脚本代码100行左右,比较好理解,贴上代码。

  本来想用beautifulsoup,不过考虑到安装三方库麻烦,所以还是用自带的sgmllib来,不需要关心库。发邮件函数没有实现,根据各自的smtp服务器实现以下即可。

 1 #!/usr/bin/env python

 2 #coding:UTF-8

 3 

 4 import urllib2

 5 from sgmllib import SGMLParser

 6 import smtplib

 7 import time

 8 #from email.mime.text import MIMEText

 9 #from bs4 import BeautifulSoup

10 #import re

11 

12 class UrlParser(SGMLParser):

13     urls = []

14     def do_a(self,attrs):

15         '''parse tag a'''

16         for name,value in attrs:

17             if name=='href':

18                 self.urls.append(value)

19             else:

20                 continue

21     

22     def do_link(self,attrs):

23         '''parse tag link'''

24         for name,value in attrs:

25             if name=='href':

26                 self.urls.append(value);

27             else:

28                 continue

29 

30 def checkUrl(checkurl, isDetail):

31     '''检查checkurl对应的网页源码是否有非法url'''

32     parser = UrlParser()

33     page = urllib2.urlopen(checkurl)

34     content = page.read()

35     #content = unicode(content, "gb2312").encode("utf8")

36     parser.feed(content)

37     urls = parser.urls

38     

39     dailyUrls = []

40     detailUrl = ""

41     for url in urls:

42         if 'daily' in url:

43             dailyUrls.append(url);

44         if not detailUrl and not isDetail and 'detail.ju.taobao.com' in url:

45             detailUrl = url

46     

47     page.close()

48     parser.close()

49     

50     if isDetail:

51         return dailyUrls

52     else:

53         return dailyUrls,detailUrl

54 

55 def sendMail():

56     '''发送提醒邮件'''

57     pass

58     

59 def log(content):

60     '''记录执行日志'''

61     logFile = 'checkdailyurl.log'

62     f = open(logFile,'a')

63     f.write(str(time.strftime("%Y-%m-%d %X",time.localtime()))+content+'\n')

64     f.flush()

65     f.close()

66 

67 def main():

68     '''入口方法'''

69     #检查ju

70     url = "XXX.xxx.com"

71 

72     dailyUrls,detailUrl=checkUrl(url, False)

73     if dailyUrls:

74         #检查到daily链接,发送告警邮件

75         sendMail()

76         log('check: find daily url')

77     else:

78         #没检查到daily链接,不处理

79         log('check: not find daily url')

80 

81     #检查judetail

82     dailyUrls=checkUrl(detailUrl, True)

83     if dailyUrls:

84         #检查到daily链接,发送告警邮件

85         log('check: find daily url')

86         sendMail()

87     else:

88         #没检查到daily链接,不处理

89         log('check: not find daily url')

90 

91 if __name__ == '__main__':

92     main()

 

你可能感兴趣的:(python)