2015-04-21 18 views
9

Ich versuche ein Skript zu machen, das nicht registrierte Domains zurückgeben würde. Ich arbeite in Python 2.7. Ich habe gelesen, dass Modul whois in der Lage sein sollte, das zu tun, aber der Code, den ich geschrieben habe, erhöht den Fehler.Überprüfen, ob die Domain registriert ist

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

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

Dies ist der Fehler:

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 

Sie haben keine Ahnung, was falsch sein könnte? Oder können Sie mir eine bessere Lösung geben?

EDIT: Ich versuchte pythonwhois-Modul, aber es gibt auch Fehler zurück.

EDIT2: Nach einer Lösung hier, auf SO habe ich versucht, pywhois zu verwenden, dieser Code löst auch Fehler.

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

ERROR:

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

Hat das Whois-Modul für Sie funktioniert? – Ajay

+0

@Ajay Nein, hat es nicht. Es erhöht den Fehler, etwas mit Subprozess, so dass es ein anderes Problem sein kann. –

+0

Haben Sie Pip zur Installation oder eine andere Methode verwendet? Ich bin auf ubuntu und benutze pip zu installieren. Und dieser Code arbeitete für mich. – Ajay

Antwort

7

mit pythonwhois veröffentlichen, wenn Sie bevorzugen, könnte es sein

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

, die ein Wörterbuch

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

bearbeiten zurück: i Ihre whois geprüft Dieser Code hat für mich funktioniert.

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

diese api verwendet Unix/Linux der whois-Befehls-Shell und wie es here gezeigt sollten Sie nicht http:// vor Domain-Namen hinzufügen. oder wenn Sie eine Unix/Linux-Maschine Test haben diese:

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

aber mit http (es ist vielleicht wegen http (s) ist ein nur ein Protokolltyp und hat keine REALITON mit Domain-Namen selbst

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

ich die documentation und arbeitete sollte wie mysite.com sein für me.Domain Namen eingecheckt haben (nicht 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 Ich weiß nicht, warum es nicht für andere funktioniert und Fehler macht. ich einen Screenshot von meinem Terminal Screenshot

+0

'AttributError: 'NoneType' Objekt hat kein Attribut 'Registrar'' für Ihr genaues Beispiel – heinst

+0

@heinst Es funktioniert gut auf Ubuntu – Ajay

1

Das whois Projekt github verschoben wurde, können Sie es pip install python-whois mit installieren:

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

ich habe Probleme mit Python-whois in Python 3, aber Python 2 funktioniert gut mit dem folgenden Code.

Zuerst würde ich empfehlen, alle Whois-Module zu deinstallieren, die Sie möglicherweise installiert haben. Sowohl python-whois (0.6.1) als auch whois (0.7) verwenden dasselbe import whois, was für mich zusätzliche Verwirrung verursachte.

Als nächstes installieren Sie Python-Whois über Eingabeaufforderung, Terminal usw.

pip install python-whois

Einmal installiert, geben Sie folgenden Code in Ihren bevorzugten 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 

Das Ergebnis ist ein Wörterbuch.

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

Laut PEP 008 - es ist wahrscheinlich keine gute Idee, dundersoned Variablennamen zu verwenden. Gibt es einen Grund, warum du sie hier benutzt hast, mit denen ich nicht vertraut bin? (Ich verwende kaum IDEs). – bjd2385

+0

@ bjd2385 Ich entfernte die Unterstriche und ersetzte sie durch einen Block Kommentare, so dass es keine Verwirrung geben würde, da diese 4 Zeilen nicht als Variablen gedacht sind. Danke für die Rückmeldung. – myidealab

Verwandte Themen