使用 pythonwhois 测试域名可用性
Testing domain-name availability with pythonwhois
我正在成功使用 pythonwhois
(与 pip install ...
一起安装)来检查 .com 域的可用性:
import pythonwhois
for domain in ['aaa.com', 'bbb.com', ...]:
details = pythonwhois.get_whois(domain)
if 'No match for' in str(details): # simple but it works!
print domain
但是:
- 有点慢(平均每秒2个请求)
- 如果我请求26*26*26 ~ 17000次,会不会被
whois
服务器拉黑?
(我正在测试 ???mail.com
的可用性,其中 ?
为 a..z
)
问题:是否有比每个域执行一个 whois
请求更好的检查可用性的方法?
编辑:截至 2017 年 11 月,这项工作在 9572 秒内完成,here is the full list 形式的所有可用域 ???mail.com
,如果有人有兴趣启动电子邮件服务!
你应该并行化你正在做的事情。由于你的函数大部分时间都在等待,你可以一次验证很多工作(不限于你的处理器数量)。示例:
import pythonwhois
from joblib import Parallel, delayed, cpu_count
n_jobs = 100 # works in parallel
def f(domain):
details = pythonwhois.get_whois(domain)
if 'No match for' in str(details): # simple but it works!
print(domain)
return domain
else:
return None
domains= ['aaa.com', 'bbb.com', 'ccc.com', 'bbbaohecraoea.com']
result = Parallel(n_jobs=n_jobs, verbose=10)(delayed(f)(domain) for domain in domains)
# create a list with the available domains
available_domains=[domains[idx] for idx,r in enumerate(result) if r!=None]
print(available_domains)
# Result
# ['bbbaohecraoea.com']
我正在成功使用 pythonwhois
(与 pip install ...
一起安装)来检查 .com 域的可用性:
import pythonwhois
for domain in ['aaa.com', 'bbb.com', ...]:
details = pythonwhois.get_whois(domain)
if 'No match for' in str(details): # simple but it works!
print domain
但是:
- 有点慢(平均每秒2个请求)
- 如果我请求26*26*26 ~ 17000次,会不会被
whois
服务器拉黑?
(我正在测试???mail.com
的可用性,其中?
为a..z
)
问题:是否有比每个域执行一个 whois
请求更好的检查可用性的方法?
编辑:截至 2017 年 11 月,这项工作在 9572 秒内完成,here is the full list 形式的所有可用域 ???mail.com
,如果有人有兴趣启动电子邮件服务!
你应该并行化你正在做的事情。由于你的函数大部分时间都在等待,你可以一次验证很多工作(不限于你的处理器数量)。示例:
import pythonwhois
from joblib import Parallel, delayed, cpu_count
n_jobs = 100 # works in parallel
def f(domain):
details = pythonwhois.get_whois(domain)
if 'No match for' in str(details): # simple but it works!
print(domain)
return domain
else:
return None
domains= ['aaa.com', 'bbb.com', 'ccc.com', 'bbbaohecraoea.com']
result = Parallel(n_jobs=n_jobs, verbose=10)(delayed(f)(domain) for domain in domains)
# create a list with the available domains
available_domains=[domains[idx] for idx,r in enumerate(result) if r!=None]
print(available_domains)
# Result
# ['bbbaohecraoea.com']