测试、预发布后用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在windows命令行下输出彩色文字的方法
Mar 19 Python
初步解析Python下的多进程编程
Apr 28 Python
python3操作mysql数据库的方法
Jun 23 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
python 猴子补丁(monkey patch)
Jun 26 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
Python集合操作方法详解
Feb 09 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
python 6种方法实现单例模式
Dec 15 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
ThinkPHP实现简单登陆功能
2017/04/28 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
Python生成器(Generator)详解
2015/04/13 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Python创建模块及模块导入的方法
2015/05/27 Python
python实现多线程的两种方式
2016/05/22 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
Java的基础面试题附答案
2016/01/10 面试题
职业女性的职业规划
2014/03/04 职场文书
离婚协议书范文2015
2015/01/26 职场文书
学校推普周活动总结
2015/05/07 职场文书
趣味运动会简讯
2015/07/20 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server