#!/usr/bin/env python
# -*- coding:utf-8 -*-
import urllib.request
import urllib.error
import time
def get_error_domain(domain_list): # 將獲取網站狀態碼以及輸出異常域名的功能寫成函數,調用的時候只須要將文件路徑放進參數便可
error_list = set() # 預約義一個set集合,由於set集合是自動去重的,後面有用
url_list = open(domain_list, 'r')
for line in url_list:
if len(line.strip()): # 將空行去掉,知足非空行的行能夠進入條件進行循環
line_no_blank = line.strip()
url = "http://www."+ line_no_blank
error_code = ''
error_reason = ''
try: # 使用try except語句避免因異常域名致使整個for大循環報錯終止
start = time.clock()
file = urllib.request.urlopen(url,timeout=15)
elapsed = (time.clock() - start) # 獲取訪問時長
print("%s---->%s, 耗時%s" %(line_no_blank,file.getcode(),elapsed))
except urllib.error.URLError as e: # 異常域名會進入except,能夠獲得出錯緣由和出錯http狀態碼
print("%s異常" % line_no_blank)
if hasattr(e, "code"):
print("錯誤狀態碼:%s" % e.code)
error_code = str(e.code)
if hasattr(e, "reason"):
print("出錯緣由:%s" % e.reason)
error_reason = str(e.reason)
error_status = error_code + '\t'+error_reason
error_list.add(line_no_blank+'\t'+error_status+"\n") # 將全部異常域名存入set集合,會自動去重
url_list.close()
print("全部異常域名:")
for line in error_list: # 循環打印
print(line)
abnormal_list = open('異常域名.txt', 'w') # 若是以前有檢測記錄,則直接被覆蓋
abnormal_list.writelines(error_list) # 將set的元素所有一次性寫入
abnormal_list.close() # 關閉文件句柄
get_error_domain('域名錶.txt') # 調用函數,傳入須要檢測的域名錶文件名,一行一個,不須要加http://www., 例如: baidu.com