#!/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