代码拉取完成,页面将自动刷新
import xlrd
import requests
import time
import shutil
# import threadpool
import os
import json
import re
import xlwt
from xlutils.copy import copy
app_link='app_link.txt' #先定义一个文本,存储xlsx文件路径,一行一个路径
#将获取的whois信息存入excel表格
def json_to_xlsx(id,response,newsheet):#id:查询到第几个域名信息(表格中的序号),json:json字典(responese),newsheet:传入表名句柄,用来定位具体填入那个sheet中
#设置表头信息
title=["StateCode","Reason","Host","ContactPerson","Registrar","Email","Phone","CreationDate","ExpirationDate","WhoisServer","DnsServer","DomainStatus"]
#将表头信息填入excel表中,这里是从第10列开始,预留前面的位置
for i in range(len(title)):
newsheet.write(0,i+10,title[i])#使用传入的句柄定位后写入三个参数分别为:第几行,第几列,写入的内容
#遍历传入的JSON字典,逐项(key,value)遍历
for line in response:
#返回的json一共三个key(StateCode,Reason,Result)
#下面对Result进行在遍历,因为Result本身又是一个字典,包含了多个信息
if (line == "Result"):
Result = response[line]
i = 12 # 从第12列开始
for key in Result:
# 使用if判断的原因:如果None值被多次赋值,会出现TypeError: 'NoneType' object is not iterable。这里可以考虑使用try catch进行lazy绕过
if key==None:
continue
else:
newsheet.write(id,i,Result[key])#根据传入的id写入对应的行以及列
i += 1 #列数自增,逐步向后填入读取的内容
# print(type(Result))
#下面同理
elif (line == "StateCode"):
newsheet.write(id, 10, response[line])
else :
newsheet.write(id, 11, response[line])
#将json直接传入文本文档中,
def json_to_txt(sheet,Chinese_name,url_name,response):#传入表名,APP中文名称,待查链接,响应信息
file_name = sheet + str(time.time()) + ".json" # 创建对应的json文档,为避免重复使用当前时间进行填充
f = open(file_name, 'w')
context="\n"+"仿冒APP名称: "+Chinese_name+" 所查域名: "+url_name+":"+"\n"+str(response).replace(',','\n')
# context = "\n" + "仿冒APP名称: " + Chinese_name + " 所查域名: " + url_name + ":" + "\n" + str(response)
context=response
f.write(context)
json.dump(response,f)#将得到的json格式的内容写入文档
f.close()
#whois查询主要调用方法
def whois_detector():
#从文档中读取要查询的.xlsx和.xls文件路径
file_path=open(app_link,encoding='utf-8')
#逐行读取文件路径
lines = file_path.readlines()
for line in lines:
#处理文件路径,包括更换分隔符等
line=line.strip('\n')
line = eval(repr(line).replace('\\', '/'))
strip_line=line.split('/')[-1]
print("查询文件为:"+line)
workbook = xlrd.open_workbook(line)#获得excel表格文件句柄
newworkbook=copy(workbook)#复制文件句柄,为了在已有的excel表中写入数据
sheet_list = [] #定义文档中的sheet表列表
sheet_list = workbook.sheet_names() # 获取所有的表名
sheet_index=0 #定义表索引,方便查找表并将内容写入已有表,从零开始
for sheet in sheet_list: # 逐个表进行whois查询
#sheet应该可以直接将内容进行写入
sheet_single = workbook.sheet_by_name(sheet) # 通过表名获取内容
rows = sheet_single.nrows#行数
cols = sheet_single.ncols#列数
for col in range(1, rows ): # 遍历指定表的所有有效行,左闭右开
Chinese_name = sheet_single.cell_value(col, 1) # 获得中文名称
url_name = sheet_single.cell_value(col, 2) # 获得对应的域名
id=sheet_single.cell_value(col,0)#获取对应的id号
####使用云API进行查询
if url_name=="":#部分数据的域名部分为空
continue
url = "https://apidatav2.chinaz.com/single/whois" # 接口地址,使用ChinaZ的云API
query = {
"key": "b61891e4dfa6476b85ce1bad4d6234b6",
"domain": url_name
} # 构造参数 api对接口有自动提取域名的功能,使用统一apikey,无IP锁定
response = requests.request("GET", url, params=query).json()#返回相关信息
##将相应的json消息传入excel表格中
newsheet=newworkbook.get_sheet(sheet_index) #使用复制后的句柄通过sheet_index索引获得具体表,并创建表句柄
json_to_xlsx(id,response,newsheet) #将相关信息传入方法,方法将信息填入当前表中
# result_file=str(strip_line)+str(time.time())+".xls"
# newworkbook.save('ok.xlsx')
# newworkbook.save(result_file)
# json_to_txt(sheet,Chinese_name,url_name,response) #将结果存入文本文档中
time.sleep(0.5)#使用单一查询,考虑使用一定时间(50ms)的延时,防止查询无法及时响应
#这里将索引的增加添加到对sheet_list的遍历中,否则只能遍历一个表格
sheet_index+=1#索引加1,查找并遍历下一个表
newworkbook.save(strip_line+".xls")#遍历并所有表并填写相关信息后,另存文件,完成一个xlsx或者xls的查询和写入
file_path.close()
if __name__=='__main__':
whois_detector()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。