测试、预发布后用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分析学校四六级过关情况
Nov 22 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
Python 互换字典的键值对实例
Feb 12 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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 flush类输出缓冲剖析
2008/10/19 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP 快速排序算法详解
2014/11/10 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
详解Python中的各种函数的使用
2015/05/24 Python
Python list操作用法总结
2015/11/10 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
Python实现随机选择元素功能
2017/09/14 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
python list格式数据excel导出方法
2018/10/31 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python如何使用代码运行助手
2020/07/03 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
战友聚会主持词
2014/04/02 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python