设为首页 收藏本站
查看: 725|回复: 0

[经验分享] 一个检测网页是否有日常链接的python脚本

[复制链接]

尚未签到

发表于 2015-4-24 05:49:36 | 显示全部楼层 |阅读模式
  在大的互联网公司干技术的基本都会碰到测试、预发布、线上这种多套环境的,来实现测试和线上正式环境的隔离,这种情况下,就难免会碰到秀逗了把测试的链接发布到线上的情况,一般这种都是通过一些测试的检查工具来检查链接来规避风险的。前两天跟了一个问题也是这个情况,开发疏忽把日常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()
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60025-1-1.html 上篇帖子: Python 文件Hash(MD5,SHA1) 下篇帖子: OpenCV-Python教程(4、形态学处理)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表