我有一个很大的域名列表,我需要检查域名是否现在可用。我是这样做的:
import requests
list_domain = ['google.com', 'facebook.com']
for domain in list_domain:
result = requests.get(f'http://{domain}', timeout=10)
if result.status_code == 200:
print(f'Domain {domain} [+++]')
else:
print(f'Domain {domain} [---]')但是检查太慢了。有没有办法让它更快?也许有人知道另一种检查域名是否存在的方法?
发布于 2020-11-26 02:55:01
如果您想检查哪些域可用,更正确的方法是从requests模块捕获ConnectionError,因为即使您得到的响应代码不是200,存在响应这一事实也意味着存在与该域相关联的服务器。因此,域名被占用。
就检查域可用性而言,这不是完整的证据,因为域可能被占用,但可能没有与其关联的适当A记录,或者服务器可能暂时停机。
下面的代码也是异步的。
from concurrent.futures import ThreadPoolExecutor
import requests
from requests.exceptions import ConnectionError
def validate_existence(domain):
try:
response = requests.get(f'http://{domain}', timeout=10)
except ConnectionError:
print(f'Domain {domain} [---]')
else:
print(f'Domain {domain} [+++]')
list_domain = ['google.com', 'facebook.com', 'nonexistent_domain.test']
with ThreadPoolExecutor() as executor:
executor.map(validate_existence, list_domain)发布于 2020-11-26 01:42:17
你可以通过"requests-futures“模块做到这一点。requests-futures异步运行,如果你有一个平均的互联网连接,它可以每秒检查8-10url(根据我的经验)。
发布于 2020-11-29 19:45:44
您可以使用套接字库来确定域是否具有DNS条目:
>>> import socket
>>>
>>> addr = socket.gethostbyname('google.com')
>>> addr
'74.125.193.100'
>>> socket.gethostbyname('googl42652267e.com')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known
>>> https://stackoverflow.com/questions/65009692
复制相似问题