散装WHOIS查找20,000个域名 - 暂停



正在尝试批量提取20,000个域名的whois信息,python代码在我的CSV文件中与2个项目一起使用,但是在20000域名的整个数据集中带来了错误

尝试了2个域名,好的。使用20K域名的完整列表带来错误

import whois
import matplotlib.pyplot as plt
import numpy as np  
import pandas as pd  
import socket
import os
import csv 
import datetime
import time
import requests
from ipwhois import IPWhois
from urllib import request
from ipwhois.utils import get_countries
import tldextract
from ipwhois.utils import get_countries
countries = get_countries(is_legacy_xml=True)
from ipwhois.experimental import bulk_lookup_rdap
from ipwhois.hr import (HR_ASN, HR_ASN_ORIGIN, HR_RDAP_COMMON, HR_RDAP, HR_WHOIS, HR_WHOIS_NIR)
countries = get_countries(is_legacy_xml=True)
import ipaddress
df = pd.read_csv('labelled_dataset.csv')
#TimeOut Setting
s = socket.socket()
s.settimeout(10)
#Date Processing Function
def check_date_type(d):
    if type(d) is datetime.datetime:
        return d
    if type(d) is list:
        return d[0]
for index,row in df.iterrows():
    DN = df.iloc[index]['Domains']
    df['IPaddr'] = socket.gethostbyname(DN)
    df['IPcity'] = IPWhois(socket.gethostbyname(DN),     allow_permutations=True).lookup_whois()['nets'][0]['city']
    df['ASNumber'] = IPWhois(socket.gethostbyname(DN), allow_permutations=True).lookup_whois()['asn']
    df['NetAddr'] = IPWhois(socket.gethostbyname(DN), allow_permutations=True).lookup_whois()['nets'][0]['address']
    df['NetCity'] = IPWhois(socket.gethostbyname(DN), allow_permutations=True).lookup_whois()['nets'][0]['city']
    df['NetPostCode'] = IPWhois(socket.gethostbyname(DN), allow_permutations=True).lookup_whois()['nets'][0]['postal_code']
    W = whois.whois(DN)
    df['WebsiteName'] = W.name
    df['ASRegistrar'] = W.registrar
    df['CtryCode'] = W.country
    df['Dstatus'] = W.status[1]
    df['RegDate'] = check_date_type(W.creation_date)
    df['ExDate'] = check_date_type(W.expiration_date)
df.to_csv('extracted_dataset_1_1.csv', index=False)

期望ASN详细信息的输出,每个域名中的每个域名信息在CSV文件中导出

您正在为您查找的每个属性创建一个新的ipwhois对象。这意味着您每次迭代至少运行5个Whois查询。

这将生成大量的网络流量,并且完全不必要 - 您可以每个域一次运行whois并访问结果。

尝试将循环中的代码更改为这样的东西:

df['IPaddr'] = socket.gethostbyname(DN)
ipwhois = IPWhois(df['IPaddr'], allow_permutations=True).lookup_whois()
if (ipwhois):
  df['IPcity'] = ipwhois['nets'][0]['city']
  df['ASNumber'] = ipwhois['asn']
  df['NetAddr'] = ipwhois['nets'][0]['address']
  df['NetCity'] = ipwhois['city']
  df['NetPostCode'] = ipwhois['nets'][0]['postal_code']

我建议还有其他一些优化:

  • 在每次迭代或每个 n 迭代中写入您的文件,以便您可以逐步工作,并且如果您的代码错误,请不要丢失结果。
  • 使用一个库-IPWhoiswhois-不是两者。
  • 看使用aysyncio。目前,您的代码必须在继续之前等待whois查询的响应,并且网络查询比您的代码在循环中的每次迭代中运行的速度要慢很多。使用异步模型,您可以发射多个whois查询,并且只能在结果到达时采取行动。该模型可以帮助优化应用程序的效率。

相关内容

  • 没有找到相关文章

最新更新