测试、预发布后用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中urllib2模块的8个使用细节分享
Jan 01 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
pytorch常见的Tensor类型详解
Jan 15 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
python实现简单贪吃蛇游戏
Sep 29 Python
使用scrapy实现增量式爬取方式
Jun 21 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
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
不同浏览器的怪癖小结
2010/07/11 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python输出决策树图形的例子
2019/08/09 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
小学师德标兵先进事迹材料
2014/05/25 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
学校捐书倡议书
2015/04/27 职场文书
爱国主义电影观后感
2015/06/18 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
JS ES6异步解决方案
2021/04/29 Javascript