一個檢測網頁是否有日常鏈接的python腳本


     在大的互聯網公司干技術的基本都會碰到測試、預發布、線上這種多套環境的,來實現測試和線上正式環境的隔離,這種情況下,就難免會碰到秀逗了把測試的鏈接發布到線上的情況,一般這種都是通過一些測試的檢查工具來檢查鏈接來規避風險的。前兩天跟了一個問題也是這個情況,開發疏忽把日常url發布到線上了。但是測試那邊沒有自動化的監控工具,導致沒有及時發現,由於最近正好在看python,后來處理完回家就想用python做個簡單的監控。

     大略思路是:用python寫一個腳本來分析網頁里的所有url,看是否包含日常的鏈接,然后把腳本放到crontab里跑定時任務,10分鍾跑一次檢查。如果發現非法鏈接,就發告警郵件給相關人員。腳本代碼100行左右,比較好理解,貼上代碼。

  本來想用beautifulsoup,不過考慮到安裝三方庫麻煩,所以還是用自帶的sgmllib來,不需要關心庫。發郵件函數沒有實現,根據各自的smtp服務器實現以下即可。

 1 #!/usr/bin/env python
 2 #coding:UTF-8
 3 
 4 import urllib2
 5 from sgmllib import SGMLParser
 6 import smtplib
 7 import time
 8 #from email.mime.text import MIMEText
 9 #from bs4 import BeautifulSoup
10 #import re
11 
12 class UrlParser(SGMLParser):
13     urls = []
14     def do_a(self,attrs):
15         '''parse tag a'''
16         for name,value in attrs:
17             if name=='href':
18                 self.urls.append(value)
19             else:
20                 continue
21     
22     def do_link(self,attrs):
23         '''parse tag link'''
24         for name,value in attrs:
25             if name=='href':
26                 self.urls.append(value);
27             else:
28                 continue
29 
30 def checkUrl(checkurl, isDetail):
31     '''檢查checkurl對應的網頁源碼是否有非法url'''
32     parser = UrlParser()
33     page = urllib2.urlopen(checkurl)
34     content = page.read()
35     #content = unicode(content, "gb2312").encode("utf8")
36     parser.feed(content)
37     urls = parser.urls
38     
39     dailyUrls = []
40     detailUrl = ""
41     for url in urls:
42         if 'daily' in url:
43             dailyUrls.append(url);
44         if not detailUrl and not isDetail and 'detail.ju.taobao.com' in url:
45             detailUrl = url
46     
47     page.close()
48     parser.close()
49     
50     if isDetail:
51         return dailyUrls
52     else:
53         return dailyUrls,detailUrl
54 
55 def sendMail():
56     '''發送提醒郵件'''
57     pass
58     
59 def log(content):
60     '''記錄執行日志'''
61     logFile = 'checkdailyurl.log'
62     f = open(logFile,'a')
63     f.write(str(time.strftime("%Y-%m-%d %X",time.localtime()))+content+'\n')
64     f.flush()
65     f.close()
66 
67 def main():
68     '''入口方法'''
69     #檢查ju
70     url = "XXX.xxx.com"
71 
72     dailyUrls,detailUrl=checkUrl(url, False)
73     if dailyUrls:
74         #檢查到daily鏈接,發送告警郵件
75         sendMail()
76         log('check: find daily url')
77     else:
78         #沒檢查到daily鏈接,不處理
79         log('check: not find daily url')
80 
81     #檢查judetail
82     dailyUrls=checkUrl(detailUrl, True)
83     if dailyUrls:
84         #檢查到daily鏈接,發送告警郵件
85         log('check: find daily url')
86         sendMail()
87     else:
88         #沒檢查到daily鏈接,不處理
89         log('check: not find daily url')
90 
91 if __name__ == '__main__':
92     main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM