Как в Python проверить, свободен домен или нет?

Мне нужно проверять, свободен домен или нет. Подскажите функцию, которая принимает на вход имя домена, например "ya.ru", а на выходе выдает статус свободен домен True или занят False, ну или любую другую информацию о домене, из которой можно понять статус домена?

Ранее, в python2.7 я делал проверку через модуль whois

whois.whois('google.com')

Но в python 3 это уже не работает, я получаю ошибки. Привожу скрины с ошибками.

введите сюда описание изображения

введите сюда описание изображения


Ответы (2 шт):

Автор решения: mrEvgenX

Модуль под капотом запускает консольную утилиту whois с помощью библиотеки subprocess.

Она скорее всего не установлена. Команда, которая должна помочь:

sudo apt-get install whois

а на windows поможет утилита Whois v1.21

→ Ссылка
Автор решения: vadim vaduxa

чтобы не качать под windows exeшник whois:

import socket
for dom in ['ya.ru', 'error.qwerty']:
    try:
        s = socket.getaddrinfo(dom, 80)
        print(f'занят {dom} {s}')
    except socket.gaierror:
        print(f'свободен {dom}')

# занят ya.ru [(<AddressFamily.AF_INET: 2>, 0, 0, '', ('87.250.250.242', 80))]
# свободен error.qwerty

или pip install python-whois

import whois
for dom in ['ya.ru', 'error.qwerty']:
    details = whois.whois(dom)
    print(f'\n{dom}:\n {details}')

# ya.ru:
#  {
#   "domain_name": "YA.RU",
#   "registrar": "RU-CENTER-RU",
#   "creation_date": "1999-07-12 14:40:22",
#   "expiration_date": "2021-07-31 21:00:00",
#   "name_servers": [
#     "ns1.yandex.ru.",
#     "ns2.yandex.ru."
#   ],
#   "status": "REGISTERED, DELEGATED, VERIFIED",
#   "emails": null,
#   "org": "YANDEX, LLC."
# }

# error.qwerty:
#  {
#   "domain_name": null,
#   "registrar": null,
#   "whois_server": null,
#   "referral_url": null,
#   "updated_date": null,
#   "creation_date": null,
#   "expiration_date": null,
#   "name_servers": null,
#   "status": null,
#   "emails": null,
#   "dnssec": null,
#   "name": null,
#   "org": null,
#   "address": null,
#   "city": null,
#   "state": null,
#   "zipcode": null,
#   "country": null
# }
→ Ссылка