Проверьте, зарегистрирован ли домен

Я пытаюсь сделать скрипт, который возвращает незарегистрированные домены. Я работаю в Python 2.7. Я читал, что модуль whois должен быть в состоянии сделать это, но код, который я написал, вызывает ошибку.

Код:

import whois
domains = ['http://www.example.com']

for dom in domains:
    domain = whois.Domain(dom)
    print domain.registrar 

Ошибка:

  domain = whois.Domain(dom)
  File "C:\Python27\lib\site-packages\whois\_3_adjust.py", line 12, in __init__
    self.name               = data['domain_name'][0].strip().lower()
TypeError: string indices must be integers, not str

Ты хоть представляешь, что может быть не так? Или вы можете дать мне лучшее решение?

ОБНОВЛЕНИЕ: я пытался модуль pythonwhois, но он также возвращает ошибку.

ОБНОВЛЕНИЕ 2: Согласно одному решению здесь, на SO, я пытался использовать pywhois, этот код также вызывает ошибку.

import pywhois
w = pywhois.whois('google.com')
w.expiration_date

ОШИБКА:

w = pywhois.whois('google.com')
AttributeError: 'module' object has no attribute 'whois'

Ответ 1

с pythonwhois, если вы пользуетесь, это может быть

>>> import pythonwhois  # i'm using this http://cryto.net/pythonwhois
>>> domains = ['google.com', 'stackoverflow.com']
>>> for dom in domains:
...     details = pythonwhois.get_whois(dom)
...     print details['contacts']['registrant'] 

который возвращает словарь

{'city': u'Mountain View', 
'fax': u'+1.6506188571', 
'name': u'Dns Admin', 
'state': u'CA', 
'phone': u'+1.6502530000', 
'street': u'Please contact contact- [email protected], 1600 Amphitheatre Parkway', 
'country': u'US', 
'postalcode': u'94043', 
'organization': u'Google Inc.', 
'email': u'[email protected]'}

{'city': u'New York', 
 'name': u'Sysadmin Team', 
 'state': u'NY', 
 'phone': u'+1.2122328280', 
 'street': u'1 Exchange Plaza , Floor 26', 
 'country': u'US', 
 'postalcode': u'10006', 
 'organization': u'Stack Exchange, Inc.', 
 'email': u'[email protected]'}

edit: я проверил ваш whois этот код работал у меня.

>>> import whois
>>> domains = ['google.com', 'stackoverflow.com']
>>> for dom in domains:
...     domain = whois.query(dom)
...     print domain.name, domain.registrar
... 
google.com MARKMONITOR INC.
stackoverflow.com NAME.COM, INC.

этот api использует команду unix/linux whois shell и, как показано здесь, вы не должны добавлять http:// перед именем домена. или если у вас есть машина unix/linux, выполните следующие действия:

$ whois google.com

Whois Server Version 2.0

Domain names in the .com and .net domains can now be registered
with many different competing registrars. Go to http://www.internic.net
for detailed information ...

но с http (возможно, из-за того, что http (s) является просто типом протокола и не имеет никакой реальности с именем домена)

$ whois http://google.com
No whois server is known for this kind of object.

Ответ 2

У меня были проблемы с python-whois в Python 3, но Python 2 отлично работает для меня, используя следующий код.

Во-первых, я рекомендовал бы удалить любой модуль whois, который вы, возможно, установили. И python-whois (0.6.1), и whois (0.7) используют тот же import whois, что создало для меня некоторую дополнительную путаницу.

Затем установите python-whois через командную строку, терминал и т.д.

pip install python-whois

После установки введите следующий код в свою предпочтительную среду разработки python.

"""
Python = 2.79
OS = Windows 10
IDE = PyCharm 4.5
PyPIPackage = python-whois 0.6.1
"""

import whois
url = 'example.com'
w = whois.whois(url)
print w

В результате получается словарь.

{
  "updated_date": "2015-08-14 00:00:00", 
  "status": [
    "clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited", 
    "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", 
    "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited"
  ], 
  "name": null, 
  "dnssec": null, 
  "city": null, 
  "expiration_date": "2016-08-13 00:00:00", 
...
...
...
  "address": null, 
  "name_servers": [
    "A.IANA-SERVERS.NET", 
    "B.IANA-SERVERS.NET"
  ], 
  "org": null, 
  "creation_date": "1995-08-14 00:00:00", 
  "emails": null
}

Ответ 3

Проект whois был перемещен в github, вы можете установить его с помощью pip install python-whois:

domains = ['http://www.example.com']
from whois import whois

print(whois(domains[0]))

{'updated_date': datetime.datetime(2014, 8, 14, 0, 0), 'status': ['clientDeleteProhibited http://www.icann.org/epp#clientDeleteProhibited', 'clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited', 'clientUpdateProhibited http://www.icann.org/epp#clientUpdateProhibited'], 'name': None, 'dnssec': None, 'city': None, 'expiration_date': datetime.datetime(2015, 8, 13, 0, 0), 'zipcode': None, 'domain_name': 'EXAMPLE.COM', 'country': None, 'whois_server': ['whois.enetica.com.au', 'whois.godaddy.com', 'whois.domain.com', 'whois.iana.org'], 'state': None, 'registrar': ['ENETICA PTY LTD', 'GODADDY.COM, LLC', 'DOMAIN.COM, LLC', 'RESERVED-INTERNET ASSIGNED NUMBERS AUTHORITY'], 'referral_url': ['http://www.enetica.com.au', 'http://registrar.godaddy.com', 'http://www.domain.com', 'http://res-dom.iana.org'], 'address': None, 'name_servers': ['A.IANA-SERVERS.NET', 'B.IANA-SERVERS.NET'], 'org': None, 'creation_date': datetime.datetime(1995, 8, 14, 0, 0), 'emails': None}

Ответ 4

Установка

pip install pythonwhois

Возможно, вам потребуется выполнить pip3 install pythonwhois --user или что-то подобное.

Код

import pythonwhois


def is_registered(site):
    """Check if a domain has an WHOIS record."""
    details = pythonwhois.get_whois(site)
    return not details['raw'][0].startswith('No match for')


names = ['google', 'af35foobar90']
for name in names:
    site = '{}.com'.format(name)
    print('{}: {}'.format(site, is_registered(site)))

Ответ 5

Я проверил документацию и работал у меня. Имя домена должно быть похоже на mysite.com(не http://www.example.com)

>>> import whois
>>> domains = ['google.com']
>>> 
>>> for dom in domains:
...     domain = whois.query(dom)
...     print domain.registrar 
... 



MARKMONITOR INC.

EDIT: 1 Я не знаю, почему он не работает для других и получает ошибки. Я отправляю снимок экрана моего терминала Screenshot