首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量查找20,000个域-超时

批量查找20,000个域-超时
EN

Stack Overflow用户
提问于 2019-07-27 10:02:26
回答 1查看 1.6K关注 0票数 0

在试图大容量提取2000个域名的WHOIS信息时,python代码处理csv文件中的两个项,但对20000个域名的整个数据集带来错误。

尝试用两个域名,好的。使用20k域名的完整列表会带来错误。

代码语言:javascript
复制
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文件中导出的WHOIS信息

EN

回答 1

Stack Overflow用户

发布于 2019-07-27 11:31:05

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

这将产生大量的网络流量,而且是完全不必要的-您只需在每个域运行一次whois,并以成员身份访问结果。

尝试将循环中的代码更改为如下所示:

代码语言:javascript
复制
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 --而不是两者都使用。
  • 看看如何使用亚辛西奥。目前,您的代码必须等待来自whois查询的响应才能继续,而且网络查询比您的代码在循环中的每一次迭代中运行的速度慢很多数量级。使用异步模型,您可以触发多个whois查询,并且只能在结果到达时对其进行操作。这个模型可以帮助优化应用程序的效率。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57231047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档