测试、预发布后用python检测网页是否有日常链接
大略思路是:用python写一个脚本来分析网页里的所有url,看是否包含日常的链接,然后把脚本放到crontab里跑定时任务,10分钟跑一次检查。如果发现非法链接,就发告警邮件给相关人员。脚本代码100行左右,比较好理解,贴上代码。
本来想用beautifulsoup,不过考虑到安装三方库麻烦,所以还是用自带的sgmllib来,不需要关心库。发邮件函数没有实现,根据各自的smtp服务器实现以下即可。
#!/usr/bin/envpython
#coding:UTF-8
importurllib2
fromsgmllibimportSGMLParser
importsmtplib
importtime
#fromemail.mime.textimportMIMEText
#frombs4importBeautifulSoup
#importre
classUrlParser(SGMLParser):
urls=[]
defdo_a(self,attrs):
'''''parsetaga'''
forname,valueinattrs:
ifname=='href':
self.urls.append(value)
else:
continue
defdo_link(self,attrs):
'''''parsetaglink'''
forname,valueinattrs:
ifname=='href':
self.urls.append(value);
else:
continue
defcheckUrl(checkurl,isDetail):
'''''检查checkurl对应的网页源码是否有非法url'''
parser=UrlParser()
page=urllib2.urlopen(checkurl)
content=page.read()
#content=unicode(content,"gb2312").encode("utf8")
parser.feed(content)
urls=parser.urls
dailyUrls=[]
detailUrl=""
forurlinurls:
if'daily'inurl:
dailyUrls.append(url);
ifnotdetailUrlandnotisDetailand'www.bc5u.com'inurl:
detailUrl=url
page.close()
parser.close()
ifisDetail:
returndailyUrls
else:
returndailyUrls,detailUrl
defsendMail():
'''''发送提醒邮件'''
pass
deflog(content):
'''''记录执行日志'''
logFile='checkdailyurl.log'
f=open(logFile,'a')
f.write(str(time.strftime("%Y-%m-%d%X",time.localtime()))+content+'\n')
f.flush()
f.close()
defmain():
'''''入口方法'''
#检查ju
url="www.bc5u.com"
dailyUrls,detailUrl=checkUrl(url,False)
ifdailyUrls:
#检查到daily链接,发送告警邮件
sendMail()
log('check:finddailyurl')
else:
#没检查到daily链接,不处理
log('check:notfinddailyurl')
#检查judetail
dailyUrls=checkUrl(detailUrl,True)
ifdailyUrls:
#检查到daily链接,发送告警邮件
log('check:finddailyurl')
sendMail()
else:
#没检查到daily链接,不处理
log('check:notfinddailyurl')
if__name__=='__main__':
main()