| author | Wolfeg <LonelyWolf49@gmail.com> |
| Tue, 12 Jun 2018 06:04:13 +0700 | |
| changeset 183 | 0ab7f8a39d9b |
| parent 177 | 7030835bcf5e |
| permissions | -rw-r--r-- |
| 55 | 1 |
Goal |
2 |
==== |
|
3 |
||
4 |
- Create a simple importable Python module which will produce parsed |
|
5 |
WHOIS data for a given domain. |
|
6 |
- Able to extract data for all the popular TLDs (com, org, net, ...) |
|
7 |
- Query a WHOIS server directly instead of going through an |
|
8 |
intermediate web service like many others do. |
|
|
79
95f170b4fd13
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
78
diff
changeset
|
9 |
- Works with Python 2 & 3 |
| 55 | 10 |
|
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
11 |
|
|
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
12 |
|
| 55 | 13 |
Example |
14 |
======= |
|
15 |
||
16 |
.. sourcecode:: python |
|
17 |
||
18 |
>>> import whois |
|
19 |
>>> w = whois.whois('webscraping.com')
|
|
20 |
>>> w.expiration_date # dates converted to datetime object |
|
21 |
datetime.datetime(2013, 6, 26, 0, 0) |
|
22 |
>>> w.text # the content downloaded from whois server |
|
23 |
u'\nWhois Server Version 2.0\n\nDomain names in the .com and .net |
|
24 |
...' |
|
25 |
||
26 |
>>> print w # print values of all found attributes |
|
27 |
creation_date: 2004-06-26 00:00:00 |
|
28 |
domain_name: [u'WEBSCRAPING.COM', u'WEBSCRAPING.COM'] |
|
29 |
emails: [u'WEBSCRAPING.COM@domainsbyproxy.com', u'WEBSCRAPING.COM@domainsbyproxy.com'] |
|
30 |
expiration_date: 2013-06-26 00:00:00 |
|
31 |
... |
|
32 |
||
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
33 |
|
|
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
34 |
|
| 55 | 35 |
Install |
36 |
======= |
|
37 |
||
38 |
Install from pypi: |
|
39 |
||
|
79
95f170b4fd13
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
78
diff
changeset
|
40 |
.. sourcecode:: bash |
| 55 | 41 |
|
| 143 | 42 |
$ pip install python-whois |
| 55 | 43 |
|
44 |
Or checkout latest version from repository: |
|
45 |
||
|
79
95f170b4fd13
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
78
diff
changeset
|
46 |
.. sourcecode:: bash |
| 55 | 47 |
|
| 143 | 48 |
$ hg clone https://bitbucket.org/richardpenman/pywhois |
| 55 | 49 |
|
|
79
95f170b4fd13
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
78
diff
changeset
|
50 |
Note that then you will need to manually install the futures module, which allows supporting both Python 2 & 3: |
|
78
9f5fac50355a
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
77
diff
changeset
|
51 |
|
|
9f5fac50355a
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
77
diff
changeset
|
52 |
|
|
9f5fac50355a
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
77
diff
changeset
|
53 |
.. sourcecode:: bash |
|
9f5fac50355a
README.rst edited online with Bitbucket
Richard Penman <richard.penman@gmail.com>
parents:
77
diff
changeset
|
54 |
|
| 143 | 55 |
$ pip install futures |
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
56 |
|
| 143 | 57 |
Run test cases for python 2 & 3: |
| 77 | 58 |
|
| 143 | 59 |
.. sourcecode:: bash |
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
60 |
|
| 143 | 61 |
$ python -m unittest discover test |
62 |
............. |
|
63 |
---------------------------------------------------------------------- |
|
64 |
Ran 13 tests in 0.812s |
|
65 |
||
66 |
OK |
|
67 |
||
68 |
$ python3 -m unittest discover test |
|
69 |
............. |
|
70 |
---------------------------------------------------------------------- |
|
71 |
Ran 13 tests in 1.431s |
|
72 |
||
73 |
OK |
|
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
74 |
|
| 177 | 75 |
SOCKS Proxy support requirements: |
76 |
||
77 |
.. sourcecode:: bash |
|
78 |
||
79 |
$ pip install PySocks |
|
80 |
............ |
|
81 |
--------------------------------------------------------------------- |
|
82 |
$ export SOCKS=socksproxy.someplace.com:8080 |
|
83 |
||
|
61
c391985a797b
README.rst edited online with Bitbucket
Richard Penman <richardbp@gmail.com>
parents:
55
diff
changeset
|
84 |
|
|
131
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
85 |
Problems? |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
86 |
========= |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
87 |
|
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
88 |
Pull requests are welcome! |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
89 |
|
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
90 |
Thanks to the many who have sent patches for additional TLDs. If you want to add or fix a TLD it's quite straightforward. |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
91 |
See example domains in `whois/parser.py <https://bitbucket.org/richardpenman/pywhois/src/tip/whois/parser.py?at=default&fileviewer=file-view-default>`_ |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
92 |
|
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
93 |
Basically each TLD has a similar format to the following: |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
94 |
|
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
95 |
.. sourcecode:: python |
| 55 | 96 |
|
|
131
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
97 |
class WhoisOrg(WhoisEntry): |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
98 |
"""Whois parser for .org domains |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
99 |
""" |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
100 |
regex = {
|
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
101 |
'domain_name': 'Domain Name: *(.+)', |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
102 |
'registrar': 'Registrar: *(.+)', |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
103 |
'whois_server': 'Whois Server: *(.+)', |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
104 |
... |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
105 |
} |
| 55 | 106 |
|
|
131
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
107 |
def __init__(self, domain, text): |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
108 |
if text.strip() == 'NOT FOUND': |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
109 |
raise PywhoisError(text) |
|
193a62737030
README.rst edited online with Bitbucket
Richard <richardbp@gmail.com>
parents:
100
diff
changeset
|
110 |
else: |
| 143 | 111 |
WhoisEntry.__init__(self, domain, text) |