2015-04-21 17 views
9

Sto provando a creare uno script che restituisca domini non registrati. Sto lavorando in Python 2.7. Ho letto che il modulo whois dovrebbe essere in grado di farlo ma il codice che ho scritto genera un errore.Controlla se il dominio è registrato

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

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

Questo è l'errore:

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 

Avete idea di cosa potrebbe essere sbagliato? O puoi darmi una soluzione migliore?

EDIT: Ho provato il modulo pythonwhois ma restituisce anche l'errore.

EDIT2: Secondo una soluzione qui, su SO, ho provato a utilizzare pywhois, questo codice genera anche un errore.

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

ERRORE:

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

Il modulo whois ha funzionato per te? – Ajay

+0

@ Ajay No, non è stato così. Solleva l'errore, qualcosa con sottoprocesso quindi può essere un altro problema. –

+0

Hai usato pip per installare o qualsiasi altro metodo? Sono su ubuntu e ho usato pip per l'installazione. E quel codice ha funzionato per me. – Ajay

risposta

7

con pythonwhois se sei a favore, potrebbe essere

>>> 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'] 

che restituisce un dizionario

{'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: Ho controllato il tuo whois questo codice ha funzionato per me.

>>> 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. 

questa API utilizza comando di shell whois Unix/Linux e come mostrato here non è necessario aggiungere http:// prima del nome di dominio. o se si dispone di un test/macchina linux unix questo:

$ 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 ... 

ma con http (è forse a causa del http (s) è un solo un tipo di protocollo, e non ha alcun REALITON con nome a dominio stesso)

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

Ho controllato il documentation e ho lavorato per nome me.Domain dovrebbe essere come mysite.com (non http://www.example.com)

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



MARKMONITOR INC. 

EDIT: 1 I non so perché non sta funzionando per gli altri e ottenere errori. sto postando uno screenshot del mio terminale Screenshot

+0

'AttributeError: L'oggetto 'NoneType' non ha attributo 'registrar'' per il vostro esatto esempio – heinst

+0

@heinst Funziona bene su ubuntu – Ajay

1

Il progetto whois è stato spostato a github, è possibile installarlo utilizzando 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} 
3

ho avuto problemi con python-whois in Python 3, ma Python 2 funziona bene per me utilizzando il seguente codice.

Innanzitutto, si consiglia di disinstallare tutti i moduli whois che è possibile installare. Sia python-whois (0.6.1) che whois (0.7) usano lo stesso import whois, il che ha creato per me ulteriore confusione.

Successivamente, installare python-whois tramite prompt dei comandi, terminale, ecc.

pip install python-whois

Una volta installato, inserire il seguente codice nel tuo IDE preferito pitone.

""" 
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 

Il risultato è un dizionario.

{ 
    "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 
} 
+0

Secondo PEP 008 - probabilmente non è una buona idea usare nomi di variabili con dunderscored. C'è una ragione per cui li hai usati qui che non mi è familiare? (Non uso quasi nessun IDE). – bjd2385

+0

@ bjd2385 Ho rimosso i caratteri di sottolineatura e li ho sostituiti con un commento di blocco, quindi non ci sarebbe stata alcuna confusione poiché quelle 4 linee non sono intese come variabili. Grazie per il feedback. – myidealab

Problemi correlati