测试、预发布后用python检测网页是否有日常链接


Posted in Python onJune 03, 2014

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

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

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

#!/usr/bin/env python 
#coding:UTF-8 import urllib2 
from sgmllib import SGMLParser 
import smtplib 
import time 
#from email.mime.text import MIMEText 
#from bs4 import BeautifulSoup 
#import re 
class UrlParser(SGMLParser): 
urls = [] 
def do_a(self,attrs): 
'''''parse tag a''' 
for name,value in attrs: 
if name=='href': 
self.urls.append(value) 
else: 
continue 
def do_link(self,attrs): 
'''''parse tag link''' 
for name,value in attrs: 
if name=='href': 
self.urls.append(value); 
else: 
continue 
def checkUrl(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 = "" 
for url in urls: 
if 'daily' in url: 
dailyUrls.append(url); 
if not detailUrl and not isDetail and 'www.bc5u.com' in url: 
detailUrl = url 
page.close() 
parser.close() 
if isDetail: 
return dailyUrls 
else: 
return dailyUrls,detailUrl 
def sendMail(): 
'''''发送提醒邮件''' 
pass 
def log(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() 
def main(): 
'''''入口方法''' 
#检查ju 
url = "www.bc5u.com" 
dailyUrls,detailUrl=checkUrl(url, False) 
if dailyUrls: 
#检查到daily链接,发送告警邮件 
sendMail() 
log('check: find daily url') 
else: 
#没检查到daily链接,不处理 
log('check: not find daily url') 
#检查judetail 
dailyUrls=checkUrl(detailUrl, True) 
if dailyUrls: 
#检查到daily链接,发送告警邮件 
log('check: find daily url') 
sendMail() 
else: 
#没检查到daily链接,不处理 
log('check: not find daily url') 
if __name__ == '__main__': 
main()
Python 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python语言的变量认识及操作方法
Feb 11 Python
Python在图片中插入大量文字并且自动换行
Jan 02 Python
python hough变换检测直线的实现方法
Jul 12 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python使用Pandas库常见操作详解
Jan 16 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
python代码xml转txt实例
Mar 10 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
Python实现弹球小游戏
Aug 01 Python
Python中的CURL PycURL使用例子
Jun 01 #Python
Python实现多线程下载文件的代码实例
Jun 01 #Python
python使用在线API查询IP对应的地理位置信息实例
Jun 01 #Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 #Python
2款Python内存检测工具介绍和使用方法
Jun 01 #Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 #Python
python应用程序在windows下不出现cmd窗口的办法
May 29 #Python
You might like
PHP入门速成(2)
2006/10/09 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
javascript date格式化示例
2013/09/25 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
AngularJS语法详解
2015/01/23 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
JavaScript中的this机制
2016/01/30 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python常用知识点汇总
2016/05/08 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
生产管理的三大手法
2013/11/11 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
水电工程师岗位职责
2015/02/13 职场文书
公司员工手册范本
2015/05/14 职场文书
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python