web-dev-qa-db-fra.com

Vérifier si le domaine est enregistré

J'essaie de faire un script qui renverrait des domaines non enregistrés. Je travaille dans Python 2.7. J'ai lu que le module whois devrait pouvoir le faire, mais le code que j'ai écrit soulève une erreur.

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

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

C'est l'erreur:

  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

Avez-vous une idée de ce qui pourrait être faux? Ou pouvez-vous me donner une meilleure solution? 

EDIT: J'ai essayé le module pythonwhois mais il renvoie aussi une erreur.

EDIT2: Selon une solution ici, sur SO, j'ai essayé d'utiliser pywhois, ce code génère également une erreur. 

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

ERREUR:

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

avec pythonwhois si vous préférez, ça pourrait être

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

qui retourne un dictionnaire 

{'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: j'ai vérifié votre whois ce code a fonctionné pour moi. 

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

cette api utilise la commande du shell whois unix/linux et comme il est montré ici vous ne devriez pas ajouter http:// avant le nom de domaine. ou si vous avez une machine unix/linux, testez ceci:

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

mais avec http (c'est peut-être parce que http (s) est juste un type de protocole, et n'a pas de realiton avec le nom de domaine lui-même)

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

J'ai eu des problèmes avec python-whois dans Python 3, mais Python 2 fonctionne bien pour moi en utilisant le code suivant. 

Premièrement, je vous recommande de désinstaller tout module whois que vous avez éventuellement installé. Python-whois (0.6.1) et whois (0.7) utilisent tous deux le même import whois, ce qui a créé une confusion supplémentaire pour moi.

Ensuite, installez python-whois via une invite de commande, un terminal, etc.

pip install python-whois

Une fois installé, entrez le code suivant dans votre environnement de développement Python préféré.

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

Le résultat est un dictionnaire.

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

Le projet whois a été déplacé vers github , vous pouvez l’installer à l’aide de 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}
1
Padraic Cunningham

J'ai vérifié la documentation et travaillé pour moi. Le nom de domaine doit ressembler à mysite.com (pas http://www.example.com )

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



MARKMONITOR INC.

EDIT: 1 Je ne sais pas pourquoi cela ne fonctionne pas pour les autres et génère des erreurs. Je publie une capture d'écran de mon terminal Screenshot

0
Ajay