1

まだ登録されていないドメイン名をフィルタリングする小さなスクリプトがあります。私はpywhoisモジュールを使用しています。問題は、数回 (場合によっては数百回) の要求の後、突然フリーズして何もしないことです。フリーズ後すぐにプログラムを実行でき、動作するので禁止ではないと思います。

この凍結は避けたい。私の考えは、関数の実行時間をカウントすることです。時間があるラインを超えると (たとえば 10 秒)、コードが繰り返されます。

凍結を避けるためのアドバイスはありますか?または、ドメインを確認するより良い方法はありますか?

コードは次のとおりです。

for keyword in keywords:
        try:
            details = pythonwhois.get_whois(keyword+'.com')
        except Exception as e:
            print e
            continue
        if 'status' not in details.keys():
            print 'Free domain!'
            print keyword
4

2 に答える 2

0

多分あなたはdnspythonを試すことができます。ドメイン名が登録されているかどうかを確認したいだけのようです。例えば:

import dns.resolver

for keyword in keywords:
    try:
        dns.resolver.query(keyword+'.com')
    except dns.resolver.NXDOMAIN:
        print(keyword+'.com is available!')

DNS リゾルバーのデフォルトのタイムアウトは 2 秒です。それを変更したい場合はdns.resolver.Resolver、別の での新しいインスタンスを作成できますtimeout

マルチスレッド化するには、python3 を使用できる場合はスレッド プールが最適です。

from multiprocessing import Pool

def check_keyword(keyword):
    try:
        dns.resolver.query(keyword+'.com')
    except dns.resolver.NXDOMAIN:
        # You probably want to change this to a return
        print(keyword+'.com is available!') 

if __name__ == '__main__':
    keywords = [...]
    p = Pool(5)
    print(p.map(check_keyword, keywords))
于 2015-05-24T19:45:01.407 に答える