未登録のドメインを返すスクリプトを作成しようとしています。私は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モジュールを試しましたが、それもエラーを返します。
EDIT2:ここでの1つの解決策によると、SOではpywhois
を使用しようとしましたが、このコードでもエラーが発生します。
import pywhois
w = pywhois.whois('google.com')
w.expiration_date
エラー:
w = pywhois.whois('google.com')
AttributeError: 'module' object has no attribute 'whois'
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]'}
編集:私はあなたの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シェルコマンドを使用し、それが示すように here を追加しないでください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.
Python 3でpython-whoisに問題がありましたが、Python 2は次のコードを使用するとうまく動作します。
まず、インストールした可能性のあるすべてのwhoisモジュールをアンインストールすることをお勧めします。 python-whois(0.6.1)とwhois(0.7)はどちらも同じimport whois
を使用しているため、混乱が生じました。
次に、コマンドプロンプト、ターミナルなどからpython-whoisをインストールします。
pip install python-whois
インストールしたら、次のコードをお好みのpython IDE。
"""
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
}
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)))
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}
私は documentation を確認し、私のために働きました。ドメイン名はmysite.comのようになります(- http://www.example.com ではありません)。
>>> import whois
>>> domains = ['google.com']
>>>
>>> for dom in domains:
... domain = whois.query(dom)
... print domain.registrar
...
MARKMONITOR INC.
編集:1私はなぜそれが他の人のために機能していなくてエラーが出るのか分かりません。端末のスクリーンショットを投稿しています