测试、预发布后用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实现的HTTP并发测试完整示例
Apr 23 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python实现树形打印目录结构
Mar 29 Python
对numpy中shape的深入理解
Jun 15 Python
Python爬虫之网页图片抓取的方法
Jul 16 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
python中turtle库的简单使用教程
Nov 11 Python
python定义具名元组实例操作
Feb 28 Python
Python+Tkinter制作专属图形化界面
Apr 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
php compact 通过变量创建数组
2016/11/15 PHP
Javascript Math对象
2009/08/13 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python fileinput模块使用实例
2015/05/28 Python
Python实现简单登录验证
2016/04/13 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
学python最电脑配置有要求么
2020/07/05 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
2014年党支部工作总结
2014/11/13 职场文书
校运会广播稿
2015/08/19 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android