测试、预发布后用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 相关文章推荐
跟老齐学Python之总结参数的传递
Oct 10 Python
Cpy和Python的效率对比
Mar 20 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
Python pip 常用命令汇总
Oct 19 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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 破解防盗链图片函数
2008/12/09 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
Js获取事件对象代码
2010/08/05 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
python使用cPickle模块序列化实例
2014/09/25 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python实现学生信息管理系统
2020/04/05 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python 函数list&read&seek详解
2019/08/28 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Python使用Pygame绘制时钟
2020/11/29 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
如何整合JQuery和Prototype
2014/01/31 面试题
银行财务部实习生的自我鉴定
2013/11/27 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
手工社团活动方案
2014/02/17 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
Python中递归以及递归遍历目录详解
2021/10/24 Python