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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

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

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

1#!/usr/bin/env python2#coding:UTF-834importurllib25fromsgmllibimportSGMLParser6importsmtplib7importtime8#from email.mime.text import MIMEText9#from bs4 import BeautifulSoup10#import re1112classUrlParser(SGMLParser):13urls =[]14defdo_a(self,attrs):15'''parse tag a'''16forname,valueinattrs:17ifname=='href':18self.urls.append(value)19else:20continue2122defdo_link(self,attrs):23'''parse tag link'''24forname,valueinattrs:25ifname=='href':26self.urls.append(value);27else:28continue2930defcheckUrl(checkurl, isDetail):31'''检查checkurl对应的网页源码是否有非法url'''32parser =UrlParser()33page =urllib2.urlopen(checkurl)34content =page.read()35#content = unicode(content, "gb2312").encode("utf8")36parser.feed(content)37urls =parser.urls3839dailyUrls =[]40detailUrl =""41forurlinurls:42if'daily'inurl:43dailyUrls.append(url);44ifnotdetailUrlandnotisDetailand'detail.ju.taobao.com'inurl:45detailUrl =url4647page.close()48parser.close()4950ifisDetail:51returndailyUrls52else:53returndailyUrls,detailUrl5455defsendMail():56'''发送提醒邮件'''57pass5859deflog(content):60'''记录执行日志'''61logFile ='checkdailyurl.log'62f = open(logFile,'a')63f.write(str(time.strftime("%Y-%m-%d %X",time.localtime()))+content+'\n')64f.flush()65f.close()6667defmain():68'''入口方法'''69#检查ju70url ="XXX.xxx.com"7172dailyUrls,detailUrl=checkUrl(url, False)73ifdailyUrls:74#检查到daily链接,发送告警邮件75sendMail()76log('check: find daily url')77else:78#没检查到daily链接,不处理79log('check: not find daily url')8081#检查judetail82dailyUrls=checkUrl(detailUrl, True)83ifdailyUrls:84#检查到daily链接,发送告警邮件85log('check: find daily url')86sendMail()87else:88#没检查到daily链接,不处理89log('check: not find daily url')9091if__name__=='__main__':92main()

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航