from
urlparse
import
urlparse
def
parse_domain
(
url
,
levels
=
2
):
"""
Given a URL or hostname, returns the domain to the given level (level 1 is the top-level domain).
Uses a list of active top-level domains to ensure long TLD's such as ".co.uk" are correctly treated as a single TLD.
If the domain has an unrecognizable TLD, assumes it is one level.
"""
if
levels
<
1
or
not
url
:
return
None
# Parse the hostname from the url
parsed
=
urlparse
(
url
)
hostname
=
getattr
(
parsed
,
'netloc'
,
url
)
partial_domains
=
[]
partial_domain
=
""
for
section
in
reversed
(
hostname
.
split
(
"."
)):
partial_domain
=
"."
+
section
+
partial_domain
partial_domains
.
append
(
partial_domain
)
# Find the longest matching TLD, recording its index
tld_idx
=
0
for
idx
,
item
in
enumerate
(
partial_domains
):
if
item
in
tlds
:
tld_idx
=
idx
# Add the desired number of levels to the tld index,
# counting the TLD itself as the first level
try
:
domain
=
partial_domains
[
tld_idx
+
levels
-
1
]
except
IndexError
:
domain
=
partial_domains
[
-
1
]
# Remove the initial dot
return
domain
[
1
:]
tlds
=
set
((
'.2000.hu'
,
'.ab.ca'
,
'.ab.se'
,
'.abo.pa'
,
'.ac'
,
'.ac.ae'
,
'.ac.at'
,
'.ac.be'
,
'.ac.cn'
,
'.ac.com'
,
'.ac.cr'
,
'.ac.cy'
,
'.ac.fj'
,
'.ac.fk'
,
'.ac.gn'
,
'.ac.id'
,
'.ac.il'
,
'.ac.im'
,
'.ac.in'
,
'.ac.ir'
,
'.ac.jp'
,
'.ac.mw'
,
'.ac.nz'
,
'.ac.pa'
,
'.ac.ru'
,
'.ac.rw'
,
'.ac.se'
,
'.ac.th'
,
'.ac.tj'
,
'.ac.tz'
,
'.ac.ug'
,
'.ac.uk'
,
'.ac.vn'
,
'.ac.yu'
,
'.ac.za'
,
'.ac.zm'
,
'.ac.zw'
,
'.ad'
,
'.ad.jp'
,
'.adm.br'
,
'.adult.ht'
,
'.adv.br'
,
'.ae'
,
'.aero'
,
'.aero.mv'
,
'.af'
,
'.ag'
,
'.agr.br'
,
'.agrar.hu'
,
'.ah.cn'
,
'.ai'
,
'.aichi.jp'
,
'.ak.us'
,
'.akita.jp'
,
'.al'
,
'.al.us'
,
'.alt.za'
,
'.am'
,
'.am.br'
,
'.an'
,
'.ao'
,
'.aomori.jp'
,
'.aq'
,
'.ar'
,
'.ar.us'
,
'.army.mil'
,
'.arpa'
,
'.arq.br'
,
'.art.br'
,
'.art.do'
,
'.art.dz'
,
'.art.ht'
,
'.art.pl'
,
'.as'
,
'.asn.au'
,
'.asn.lv'
,
'.assn.lk'
,
'.asso.dz'
,
'.asso.fr'
,
'.asso.ht'
,
'.asso.mc'
,
'.at'
,
'.ato.br'
,
'.au'
,
'.av.tr'
,
'.aw'
,
'.az'
,
'.az.us'
,
'.ba'
,
'.bb'
,
'.bbs.tr'
,
'.bc.ca'
,
'.bd'
,
'.bd.se'
,
'.be'
,
'.bel.tr'
,
'.bf'
,
'.bg'
,
'.bh'
,
'.bi'
,
'.bialystok.pl'
,
'.bio.br'
,
'.biz'
,
'.biz.cy'
,
'.biz.et'
,
'.biz.fj'
,
'.biz.mv'
,
'.biz.nr'
,
'.biz.om'
,
'.biz.pk'
,
'.biz.pl'
,
'.biz.pr'
,
'.biz.tj'
,
'.biz.tr'
,
'.biz.tt'
,
'.biz.vn'
,
'.bj'
,
'.bj.cn'
,
'.bl.uk'
,
'.bm'
,
'.bmd.br'
,
'.bn'
,
'.bo'
,
'.bolt.hu'
,
'.br'
,
'.bs'
,
'.bt'
,
'.bv'
,
'.bw'
,
'.by'
,
'.bz'
,
'.c.se'
,
'.ca'
,
'.ca'
,
'.ca.us'
,
'.casino.hu'
,
'.cat'
,
'.cc'
,
'.cd'
,
'.cd'
,
'.cf'
,
'.cg'
,
'.ch'
,
'.ch'
,
'.cherkassy.ua'
,
'.chernigov.ua'
,
'.chernovtsy.ua'
,
'.chiba.jp'
,
'.ci'
,
'.cim.br'
,
'.city.hu'
,
'.city.za'
,
'.ck'
,
'.ck.ua'
,
'.cl'
,
'.club.tw'
,
'.cm'
,
'.cn'
,
'.cn'
,
'.cn.ua'
,
'.cng.br'
,
'.cnt.br'
,
'.co'
,
'.co.ae'
,
'.co.ag'
,
'.co.at'
,
'.co.bw'
,
'.co.ck'
,
'.co.cr'
,
'.co.fk'
,
'.co.gg'
,
'.co.hu'
,
'.co.id'
,
'.co.il'
,
'.co.im'
,
'.co.in'
,
'.co.ir'
,
'.co.je'
,
'.co.jp'
,
'.co.kr'
,
'.co.ls'
,
'.co.ma'
,
'.co.mu'
,
'.co.mw'
,
'.co.nz'
,
'.co.om'
,
'.co.rw'
,
'.co.th'
,
'.co.tj'
,
'.co.tt'
,
'.co.tz'
,
'.co.ug'
,
'.co.uk'
,
'.co.us'
,
'.co.ve'
,
'.co.yu'
,
'.co.za'
,
'.co.zm'
,
'.co.zw'
,
'.com'
,
'.com.ac'
,
'.com.ag'
,
'.com.ai'
,
'.com.al'
,
'.com.am'
,
'.com.ar'
,
'.com.au'
,
'.com.aw'
,
'.com.az'
,
'.com.bb'
,
'.com.bd'
,
'.com.bm'
,
'.com.bn'
,
'.com.bo'
,
'.com.br'
,
'.com.bs'
,
'.com.bt'
,
'.com.cd'
,
'.com.ch'
,
'.com.cn'
,
'.com.co'
,
'.com.cu'
,
'.com.cy'
,
'.com.dm'
,
'.com.do'
,
'.com.dz'
,
'.com.ec'
,
'.com.ee'
,
'.com.eg'
,
'.com.es'
,
'.com.et'
,
'.com.fj'
,
'.com.fr'
,
'.com.ge'
,
'.com.gh'
,
'.com.gi'
,
'.com.gn'
,
'.com.gr'
,
'.com.hk'
,
'.com.hn'
,
'.com.hr'
,
'.com.ht'
,
'.com.jm'
,
'.com.jo'
,
'.com.kh'
,
'.com.kw'
,
'.com.ky'
,
'.com.kz'
,
'.com.lb'
,
'.com.lc'
,
'.com.li'
,
'.com.lk'
,
'.com.lr'
,
'.com.lv'
,
'.com.ly'
,
'.com.mg'
,
'.com.mk'
,
'.com.mo'
,
'.com.mt'
,
'.com.mu'
,
'.com.mv'
,
'.com.mw'
,
'.com.mx'
,
'.com.my'
,
'.com.ng'
,
'.com.ni'
,
'.com.np'
,
'.com.nr'
,
'.com.om'
,
'.com.pa'
,
'.com.pe'
,
'.com.pf'
,
'.com.pg'
,
'.com.ph'
,
'.com.pk'
,
'.com.pl'
,
'.com.pr'
,
'.com.ps'
,
'.com.pt'
,
'.com.py'
,
'.com.ru'
,
'.com.rw'
,
'.com.sa'
,
'.com.sb'
,
'.com.sc'
,
'.com.sd'
,
'.com.sg'
,
'.com.sv'
,
'.com.sy'
,
'.com.tj'
,
'.com.tn'
,
'.com.tr'
,
'.com.tt'
,
'.com.tw'
,
'.com.ua'
,
'.com.uy'
,
'.com.ve'
,
'.com.vi'
,
'.com.vn'
,
'.com.ye'
,
'.conf.lv'
,
'.coop'
,
'.coop.br'
,
'.coop.ht'
,
'.coop.mv'
,
'.coop.mw'
,
'.cpa.pro'
,
'.cq.cn'
,
'.cr'
,
'.cri.nz'
,
'.crimea.ua'
,
'.csiro.au'
,
'.ct.us'
,
'.cu'
,
'.cu'
,
'.cv'
,
'.cv.ua'
,
'.cx'
,
'.cx'
,
'.cy'
,
'.cz'
,
'.d.se'
,
'.dc.us'
,
'.de'
,
'.de.us'
,
'.dj'
,
'.dk'
,
'.dm'
,
'.dm'
,
'.dn.ua'
,
'.dnepropetrovsk.ua'
,
'.dni.us'
,
'.do'
,
'.donetsk.ua'
,
'.dp.ua'
,
'.dpn.br'
,
'.dr.tr'
,
'.dz'
,
'.dz'
,
'.e.se'
,
'.e164.arpa'
,
'.ebiz.tw'
,
'.ec'
,
'.ec'
,
'.ecn.br'
,
'.ed.cr'
,
'.ed.jp'
,
'.edu'
,
'.edu.ac'
,
'.edu.al'
,
'.edu.au'
,
'.edu.bb'
,
'.edu.bd'
,
'.edu.bm'
,
'.edu.bn'
,
'.edu.bo'
,
'.edu.br'
,
'.edu.bt'
,
'.edu.cn'
,
'.edu.co'
,
'.edu.cu'
,
'.edu.dm'
,
'.edu.do'
,
'.edu.dz'
,
'.edu.ec'
,
'.edu.eg'
,
'.edu.es'
,
'.edu.et'
,
'.edu.ge'
,
'.edu.gh'
,
'.edu.gi'
,
'.edu.gr'
,
'.edu.hk'
,
'.edu.hn'
,
'.edu.ht'
,
'.edu.in'
,
'.edu.jm'
,
'.edu.jo'
,
'.edu.kh'
,
'.edu.kw'
,
'.edu.ky'
,
'.edu.kz'
,
'.edu.lb'
,
'.edu.lc'
,
'.edu.lk'
,
'.edu.lr'
,
'.edu.lv'
,
'.edu.ly'
,
'.edu.mg'
,
'.edu.mo'
,
'.edu.mt'
,
'.edu.mv'
,
'.edu.mw'
,
'.edu.mx'
,
'.edu.my'
,
'.edu.ng'
,
'.edu.ni'
,
'.edu.np'
,
'.edu.nr'
,
'.edu.om'
,
'.edu.pa'
,
'.edu.pe'
,
'.edu.pf'
,
'.edu.pk'
,
'.edu.pl'
,
'.edu.pr'
,
'.edu.ps'
,
'.edu.pt'
,
'.edu.py'
,
'.edu.rw'
,
'.edu.sa'
,
'.edu.sb'
,
'.edu.sc'
,
'.edu.sd'
,
'.edu.sg'
,
'.edu.sv'
,
'.edu.tj'
,
'.edu.tr'
,
'.edu.tt'
,
'.edu.tw'
,
'.edu.ua'
,
'.edu.uy'
,
'.edu.vi'
,
'.edu.vn'
,
'.edu.yu'
,
'.edu.za'
,
'.ee'
,
'.ee'
,
'.eg'
,
'.ehime.jp'
,
'.ekloges.cy'
,
'.eng.br'
,
'.ens.tn'
,
'.er'
,
'.erotica.hu'
,
'.erotika.hu'
,
'.es'
,
'.es'
,
'.esp.br'
,
'.et'
,
'.etc.br'
,
'.eti.br'
,
'.eu'
,
'.eun.eg'
,
'.f.se'
,
'.fam.pk'
,
'.far.br'
,
'.fed.us'
,
'.fhs.no'
,
'.fi'
,
'.fi.cr'
,
'.fie.ee'
,
'.film.hu'
,
'.fin.ec'
,
'.fin.tn'
,
'.firm.ht'
,
'.firm.in'
,
'.fj'
,
'.fj.cn'
,
'.fk'
,
'.fl.us'
,
'.fm'
,
'.fm.br'
,
'.fnd.br'
,
'.fo'
,
'.folkebibl.no'
,
'.forum.hu'
,
'.fot.br'
,
'.fr'
,
'.fr'
,
'.from.hr'
,
'.fst.br'
,
'.fukui.jp'
,
'.fukuoka.jp'
,
'.fukushima.jp'
,
'.fylkesbibl.no'
,
'.g.se'
,
'.g12.br'
,
'.ga'
,
'.ga.us'
,
'.game.tw'
,
'.games.hu'
,
'.gb'
,
'.gd'
,
'.gd.cn'
,
'.gda.pl'
,
'.gdansk.pl'
,
'.ge'
,
'.ge'
,
'.geek.nz'
,
'.gen.in'
,
'.gen.nz'
,
'.gen.tr'
,
'.gf'
,
'.gg'
,
'.gg'
,
'.ggf.br'
,
'.gh'
,
'.gi'
,
'.gi'
,
'.gifu.jp'
,
'.gl'
,
'.gm'
,
'.go.cr'
,
'.go.id'
,
'.go.jp'
,
'.go.th'
,
'.go.tj'
,
'.go.tz'
,
'.go.ug'
,
'.gob.bo'
,
'.gob.do'
,
'.gob.es'
,
'.gob.hn'
,
'.gob.mx'
,
'.gob.ni'
,
'.gob.pa'
,
'.gob.pe'
,
'.gob.pk'
,
'.gob.sv'
,
'.gok.pk'
,
'.gon.pk'
,
'.gop.pk'
,
'.gos.pk'
,
'.gouv.fr'
,
'.gouv.ht'
,
'.gouv.rw'
,
'.gov'
,
'.gov.ac'
,
'.gov.ae'
,
'.gov.al'
,
'.gov.au'
,
'.gov.bb'
,
'.gov.bd'
,
'.gov.bf'
,
'.gov.bm'
,
'.gov.bo'
,
'.gov.br'
,
'.gov.bt'
,
'.gov.by'
,
'.gov.ch'
,
'.gov.cn'
,
'.gov.co'
,
'.gov.cu'
,
'.gov.cx'
,
'.gov.dm'
,
'.gov.do'
,
'.gov.dz'
,
'.gov.ec'
,
'.gov.eg'
,
'.gov.et'
,
'.gov.fj'
,
'.gov.fk'
,
'.gov.ge'
,
'.gov.gh'
,
'.gov.gi'
,
'.gov.gn'
,
'.gov.gr'
,
'.gov.hk'
,
'.gov.ie'
,
'.gov.il'
,
'.gov.im'
,
'.gov.in'
,
'.gov.ir'
,
'.gov.it'
,
'.gov.jm'
,
'.gov.jo'
,
'.gov.kh'
,
'.gov.kw'
,
'.gov.ky'
,
'.gov.kz'
,
'.gov.lb'
,
'.gov.lc'
,
'.gov.li'
,
'.gov.lk'
,
'.gov.lr'
,
'.gov.lt'
,
'.gov.lu'
,
'.gov.lv'
,
'.gov.ly'
,
'.gov.ma'
,
'.gov.mg'
,
'.gov.mo'
,
'.gov.mt'
,
'.gov.mv'
,
'.gov.mw'
,
'.gov.my'
,
'.gov.ng'
,
'.gov.np'
,
'.gov.nr'
,
'.gov.om'
,
'.gov.ph'
,
'.gov.pk'
,
'.gov.pl'
,
'.gov.pr'
,
'.gov.ps'
,
'.gov.pt'
,
'.gov.py'
,
'.gov.rw'
,
'.gov.sa'
,
'.gov.sb'
,
'.gov.sc'
,
'.gov.sd'
,
'.gov.sg'
,
'.gov.sy'
,
'.gov.tj'
,
'.gov.tn'
,
'.gov.to'
,
'.gov.tp'
,
'.gov.tr'
,
'.gov.tt'
,
'.gov.tv'
,
'.gov.tw'
,
'.gov.ua'
,
'.gov.uk'
,
'.gov.vi'
,
'.gov.vn'
,
'.gov.za'
,
'.gov.zm'
,
'.gov.zw'
,
'.govt.nz'
,
'.gp'
,
'.gq'
,
'.gr'
,
'.gr'
,
'.gr.jp'
,
'.grp.lk'
,
'.gs'
,
'.gs.cn'
,
'.gt'
,
'.gu'
,
'.gub.uy'
,
'.gunma.jp'
,
'.gv.at'
,
'.gw'
,
'.gx.cn'
,
'.gy'
,
'.gz.cn'
,
'.h.se'
,
'.ha.cn'
,
'.hb.cn'
,
'.he.cn'
,
'.health.vn'
,
'.herad.no'
,
'.hi.cn'
,
'.hi.us'
,
'.hiroshima.jp'
,
'.hk'
,
'.hk'
,
'.hl.cn'
,
'.hm'
,
'.hn'
,
'.hn'
,
'.hn.cn'
,
'.hokkaido.jp'
,
'.hotel.hu'
,
'.hotel.lk'
,
'.hr'
,
'.hr'
,
'.ht'
,
'.ht'
,
'.hu'
,
'.hu'
,
'.hyogo.jp'
,
'.i.se'
,
'.ia.us'
,
'.ibaraki.jp'
,
'.icnet.uk'
,
'.id'
,
'.id.au'
,
'.id.lv'
,
'.id.ly'
,
'.id.us'
,
'.idf.il'
,
'.idn.sg'
,
'.idrett.no'
,
'.idv.hk'
,
'.idv.tw'
,
'.ie'
,
'.ie'
,
'.if.ua'
,
'.il'
,
'.il.us'
,
'.im'
,
'.imb.br'
,
'.in'
,
'.in'
,
'.in.th'
,
'.in.us'
,
'.ind.br'
,
'.ind.in'
,
'.ind.tn'
,
'.inf.br'
,
'.inf.cu'
,
'.info'
,
'.info.cy'
,
'.info.ec'
,
'.info.et'
,
'.info.fj'
,
'.info.ht'
,
'.info.hu'
,
'.info.mv'
,
'.info.nr'
,
'.info.pl'
,
'.info.pr'
,
'.info.sd'
,
'.info.tn'
,
'.info.tr'
,
'.info.tt'
,
'.info.ve'
,
'.info.vn'
,
'.ing.pa'
,
'.ingatlan.hu'
,
'.int'
,
'.int.bo'
,
'.int.lk'
,
'.int.mv'
,
'.int.mw'
,
'.int.pt'
,
'.int.ru'
,
'.int.rw'
,
'.int.tj'
,
'.int.vn'
,
'.intl.tn'
,
'.io'
,
'.ip6.arpa'
,
'.iq'
,
'.ir'
,
'.ir'
,
'.is'
,
'.isa.us'
,
'.ishikawa.jp'
,
'.isla.pr'
,
'.it'
,
'.it'
,
'.iwate.jp'
,
'.iwi.nz'
,
'.iz.hr'
,
'.je'
,
'.je'
,
'.jet.uk'
,
'.jl.cn'
,
'.jm'
,
'.jo'
,
'.jo'
,
'.jobs'
,
'.jogasz.hu'
,
'.jor.br'
,
'.jp'
,
'.jp'
,
'.js.cn'
,
'.jx.cn'
,
'.k.se'
,
'.k12.il'
,
'.k12.tr'
,
'.kagawa.jp'
,
'.kagoshima.jp'
,
'.kanagawa.jp'
,
'.kawasaki.jp'
,
'.ke'
,
'.kg'
,
'.kh'
,
'.kh.ua'
,
'.kharkov.ua'
,
'.kherson.ua'
,
'.khmelnitskiy.ua'
,
'.ki'
,
'.kids.us'
,
'.kiev.ua'
,
'.kirovograd.ua'
,
'.kitakyushu.jp'
,
'.km'
,
'.km.ua'
,
'.kn'
,
'.kobe.jp'
,
'.kochi.jp'
,
'.kommune.no'
,
'.konyvelo.hu'
,
'.kr'
,
'.kr'
,
'.kr.ua'
,
'.krakow.pl'
,
'.ks.ua'
,
'.ks.us'
,
'.kumamoto.jp'
,
'.kv.ua'
,
'.kw'
,
'.ky'
,
'.ky'
,
'.ky.us'
,
'.kyoto.jp'
,
'.kz'
,
'.la'
,
'.la.us'
,
'.lakas.hu'
,
'.law.pro'
,
'.law.za'
,
'.lb'
,
'.lc'
,
'.lel.br'
,
'.lg.jp'
,
'.lg.ua'
,
'.li'
,
'.li'
,
'.lk'
,
'.lk'
,
'.ln.cn'
,
'.lodz.pl'
,
'.lr'
,
'.ls'
,
'.lt'
,
'.lt'
,
'.ltd.cy'
,
'.ltd.gi'
,
'.ltd.lk'
,
'.ltd.uk'
,
'.lu'
,
'.lu'
,
'.lublin.pl'
,
'.lugansk.ua'
,
'.lutsk.ua'
,
'.lv'
,
'.lv'
,
'.lviv.ua'
,
'.ly'
,
'.ly'
,
'.m.se'
,
'.ma'
,
'.ma'
,
'.ma.us'
,
'.maori.nz'
,
'.mat.br'
,
'.mb.ca'
,
'.mc'
,
'.mc'
,
'.md'
,
'.md.us'
,
'.me.uk'
,
'.me.us'
,
'.med.br'
,
'.med.ec'
,
'.med.ht'
,
'.med.ly'
,
'.med.om'
,
'.med.pa'
,
'.med.pro'
,
'.med.sa'
,
'.med.sd'
,
'.media.hu'
,
'.mg'
,
'.mg'
,
'.mh'
,
'.mi.th'
,
'.mi.us'
,
'.mie.jp'
,
'.mil'
,
'.mil.ac'
,
'.mil.ae'
,
'.mil.be'
,
'.mil.bo'
,
'.mil.br'
,
'.mil.by'
,
'.mil.co'
,
'.mil.do'
,
'.mil.ec'
,
'.mil.eg'
,
'.mil.fj'
,
'.mil.ge'
,
'.mil.gh'
,
'.mil.hn'
,
'.mil.in'
,
'.mil.jo'
,
'.mil.kh'
,
'.mil.kw'
,
'.mil.kz'
,
'.mil.lt'
,
'.mil.lu'
,
'.mil.lv'
,
'.mil.mg'
,
'.mil.mv'
,
'.mil.my'
,
'.mil.no'
,
'.mil.np'
,
'.mil.nz'
,
'.mil.om'
,
'.mil.pe'
,
'.mil.pl'
,
'.mil.rw'
,
'.mil.tj'
,
'.mil.tr'
,
'.mil.tw'
,
'.mil.uk'
,
'.mil.uy'
,
'.mil.za'
,
'.miyagi.jp'
,
'.miyazaki.jp'
,
'.mk'
,
'.mk'
,
'.mk.ua'
,
'.ml'
,
'.mm'
,
'.mn'
,
'.mn.us'
,
'.mo'
,
'.mo'
,
'.mo.us'
,
'.mobi'
,
'.mod.gi'
,
'.mod.uk'
,
'.mp'
,
'.mq'
,
'.mr'
,
'.ms'
,
'.ms.us'
,
'.msk.ru'
,
'.mt'
,
'.mt'
,
'.mt.us'
,
'.mu'
,
'.mu'
,
'.muni.il'
,
'.mus.br'
,
'.museum'
,
'.museum.mv'
,
'.museum.mw'
,
'.museum.no'
,
'.museum.om'
,
'.music.mobi'
,
'.mv'
,
'.mw'
,
'.n.se'
,
'.na'
,
'.nagano.jp'
,
'.nagasaki.jp'
,
'.nagoya.jp'
,
'.name'
,
'.name.ae'
,
'.name.cy'
,
'.name.et'
,
'.name.fj'
,
'.name.hr'
,
'.name.mv'
,
'.name.my'
,
'.name.pr'
,
'.name.tj'
,
'.name.tr'
,
'.name.tt'
,
'.name.vn'
,
'.nara.jp'
,
'.nat.tn'
,
'.navy.mil'
,
'.nb.ca'
,
'.nc'
,
'.nc.us'
,
'.nd.us'
,
'.ne'
,
'.ne.jp'
,
'.ne.tz'
,
'.ne.ug'
,
'.ne.us'
,
'.nel.uk'
,
'.net'
,
'.net.ac'
,
'.net.ae'
,
'.net.ag'
,
'.net.ai'
,
'.net.al'
,
'.net.am'
,
'.net.ar'
,
'.net.au'
,
'.net.az'
,
'.net.bb'
,
'.net.bd'
,
'.net.bm'
,
'.net.bn'
,
'.net.bo'
,
'.net.br'
,
'.net.bs'
,
'.net.bt'
,
'.net.cd'
,
'.net.ch'
,
'.net.cn'
,
'.net.co'
,
'.net.cu'
,
'.net.cy'
,
'.net.dm'
,
'.net.do'
,
'.net.dz'
,
'.net.ec'
,
'.net.eg'
,
'.net.et'
,
'.net.fj'
,
'.net.fk'
,
'.net.ge'
,
'.net.gg'
,
'.net.gn'
,
'.net.gr'
,
'.net.hk'
,
'.net.hn'
,
'.net.ht'
,
'.net.il'
,
'.net.im'
,
'.net.in'
,
'.net.ir'
,
'.net.je'
,
'.net.jm'
,
'.net.jo'
,
'.net.kh'
,
'.net.kw'
,
'.net.ky'
,
'.net.kz'
,
'.net.lb'
,
'.net.li'
,
'.net.lk'
,
'.net.lr'
,
'.net.lu'
,
'.net.lv'
,
'.net.ly'
,
'.net.ma'
,
'.net.mo'
,
'.net.mt'
,
'.net.mv'
,
'.net.mw'
,
'.net.mx'
,
'.net.my'
,
'.net.ng'
,
'.net.ni'
,
'.net.np'
,
'.net.nr'
,
'.net.nz'
,
'.net.om'
,
'.net.pa'
,
'.net.pe'
,
'.net.pg'
,
'.net.pk'
,
'.net.pl'
,
'.net.pr'
,
'.net.ps'
,
'.net.pt'
,
'.net.py'
,
'.net.ru'
,
'.net.rw'
,
'.net.sa'
,
'.net.sb'
,
'.net.sc'
,
'.net.sd'
,
'.net.sg'
,
'.net.sy'
,
'.net.th'
,
'.net.tj'
,
'.net.tn'
,
'.net.tr'
,
'.net.tt'
,
'.net.tw'
,
'.net.ua'
,
'.net.uk'
,
'.net.uy'
,
'.net.ve'
,
'.net.vn'
,
'.net.ye'
,
'.net.za'
,
'.news.hu'
,
'.nf'
,
'.nf.ca'
,
'.ng'
,
'.ngo.lk'
,
'.ngo.pl'
,
'.ngo.za'
,
'.nh.us'
,
'.nhs.uk'
,
'.ni'
,
'.nic.im'
,
'.nic.in'
,
'.nic.uk'
,
'.niigata.jp'
,
'.nikolaev.ua'
,
'.nj.us'
,
'.nl'
,
'.nl'
,
'.nl.ca'
,
'.nls.uk'
,
'.nm.cn'
,
'.nm.us'
,
'.no'
,
'.no'
,
'.nom.ad'
,
'.nom.ag'
,
'.nom.br'
,
'.nom.co'
,
'.nom.es'
,
'.nom.fk'
,
'.nom.fr'
,
'.nom.mg'
,
'.nom.ni'
,
'.nom.pa'
,
'.nom.pe'
,
'.nom.za'
,
'.nome.pt'
,
'.not.br'
,
'.np'
,
'.nr'
,
'.nr'
,
'.nr'
,
'.ns.ca'
,
'.nsn.us'
,
'.nt.ca'
,
'.ntr.br'
,
'.nu'
,
'.nu.ca'
,
'.nv.us'
,
'.nx.cn'
,
'.ny.us'
,
'.nz'
,
'.o.se'
,
'.od.ua'
,
'.odessa.ua'
,
'.odo.br'
,
'.off.ai'
,
'.oh.us'
,
'.oita.jp'
,
'.ok.us'
,
'.okayama.jp'
,
'.okinawa.jp'
,
'.olsztyn.pl'
,
'.om'
,
'.on.ca'
,
'.or.at'
,
'.or.cr'
,
'.or.id'
,
'.or.jp'
,
'.or.kr'
,
'.or.th'
,
'.or.tz'
,
'.or.ug'
,
'.or.us'
,
'.org'
,
'.org.ac'
,
'.org.ae'
,
'.org.ag'
,
'.org.ai'
,
'.org.al'
,
'.org.am'
,
'.org.ar'
,
'.org.au'
,
'.org.az'
,
'.org.bb'
,
'.org.bd'
,
'.org.bm'
,
'.org.bn'
,
'.org.bo'
,
'.org.br'
,
'.org.bs'
,
'.org.bt'
,
'.org.bw'
,
'.org.cd'
,
'.org.ch'
,
'.org.cn'
,
'.org.co'
,
'.org.cu'
,
'.org.cy'
,
'.org.dm'
,
'.org.do'
,
'.org.dz'
,
'.org.ec'
,
'.org.ee'
,
'.org.eg'
,
'.org.es'
,
'.org.et'
,
'.org.fj'
,
'.org.fk'
,
'.org.ge'
,
'.org.gg'
,
'.org.gh'
,
'.org.gi'
,
'.org.gn'
,
'.org.gr'
,
'.org.hk'
,
'.org.hn'
,
'.org.ht'
,
'.org.hu'
,
'.org.il'
,
'.org.im'
,
'.org.in'
,
'.org.ir'
,
'.org.je'
,
'.org.jm'
,
'.org.jo'
,
'.org.kh'
,
'.org.kw'
,
'.org.ky'
,
'.org.kz'
,
'.org.lb'
,
'.org.lc'
,
'.org.li'
,
'.org.lk'
,
'.org.lr'
,
'.org.ls'
,
'.org.lu'
,
'.org.lv'
,
'.org.ly'
,
'.org.ma'
,
'.org.mg'
,
'.org.mk'
,
'.org.mo'
,
'.org.mt'
,
'.org.mv'
,
'.org.mw'
,
'.org.mx'
,
'.org.my'
,
'.org.ng'
,
'.org.ni'
,
'.org.np'
,
'.org.nr'
,
'.org.nz'
,
'.org.om'
,
'.org.pa'
,
'.org.pe'
,
'.org.pf'
,
'.org.pk'
,
'.org.pl'
,
'.org.pr'
,
'.org.ps'
,
'.org.pt'
,
'.org.py'
,
'.org.ru'
,
'.org.sa'
,
'.org.sc'
,
'.org.sd'
,
'.org.se'
,
'.org.sg'
,
'.org.sv'
,
'.org.tj'
,
'.org.tn'
,
'.org.tr'
,
'.org.tt'
,
'.org.tw'
,
'.org.ua'
,
'.org.uk'
,
'.org.uy'
,
'.org.ve'
,
'.org.vi'
,
'.org.vn'
,
'.org.yu'
,
'.org.za'
,
'.org.zm'
,
'.org.zw'
,
'.osaka.jp'
,
'.pa'
,
'.pa.us'
,
'.parliament.cy'
,
'.parliament.uk'
,
'.parti.se'
,
'.pe'
,
'.pe.ca'
,
'.per.kh'
,
'.per.sg'
,
'.perso.ht'
,
'.pf'
,
'.pf'
,
'.pg'
,
'.ph'
,
'.ph'
,
'.pk'
,
'.pk'
,
'.pl'
,
'.pl'
,
'.pl.ua'
,
'.plc.ly'
,
'.plc.uk'
,
'.plo.ps'
,
'.pm'
,
'.pn'
,
'.pol.dz'
,
'.pol.ht'
,
'.pol.tr'
,
'.police.uk'
,
'.poltava.ua'
,
'.post'
,
'.poznan.pl'
,
'.pp.ru'
,
'.pp.se'
,
'.ppg.br'
,
'.pr'
,
'.pr'
,
'.prd.fr'
,
'.prd.mg'
,
'.press.cy'
,
'.press.se'
,
'.presse.fr'
,
'.pri.ee'
,
'.priv.hu'
,
'.priv.no'
,
'.pro'
,
'.pro.ae'
,
'.pro.br'
,
'.pro.cy'
,
'.pro.ec'
,
'.pro.fj'
,
'.pro.ht'
,
'.pro.mv'
,
'.pro.om'
,
'.pro.pr'
,
'.pro.tt'
,
'.pro.vn'
,
'.ps'
,
'.ps'
,
'.psc.br'
,
'.psi.br'
,
'.pt'
,
'.pt'
,
'.pub.sa'
,
'.publ.pt'
,
'.pvt.ge'
,
'.pw'
,
'.py'
,
'.qa'
,
'.qc.ca'
,
'.qh.cn'
,
'.qsl.br'
,
'.re'
,
'.rec.br'
,
'.red.sv'
,
'.reklam.hu'
,
'.rel.ht'
,
'.res.in'
,
'.ri.us'
,
'.ro'
,
'.ro'
,
'.rovno.ua'
,
'.ru'
,
'.ru'
,
'.rv.ua'
,
'.rw'
,
'.rw'
,
'.s.se'
,
'.sa'
,
'.sa.cr'
,
'.saga.jp'
,
'.saitama.jp'
,
'.sapporo.jp'
,
'.sb'
,
'.sc'
,
'.sc'
,
'.sc.cn'
,
'.sc.ug'
,
'.sc.us'
,
'.sch.ae'
,
'.sch.ir'
,
'.sch.lk'
,
'.sch.ly'
,
'.sch.om'
,
'.sch.sa'
,
'.sch.uk'
,
'.sch.zm'
,
'.school.fj'
,
'.school.nz'
,
'.school.za'
,
'.sci.eg'
,
'.sd'
,
'.sd'
,
'.sd.cn'
,
'.sd.us'
,
'.se'
,
'.se'
,
'.sebastopol.ua'
,
'.sec.ps'
,
'.sendai.jp'
,
'.sex.hu'
,
'.sg'
,
'.sg'
,
'.sh'
,
'.sh.cn'
,
'.shiga.jp'
,
'.shimane.jp'
,
'.shizuoka.jp'
,
'.shop.ht'
,
'.shop.hu'
,
'.si'
,
'.sj'
,
'.sk'
,
'.sk.ca'
,
'.sl'
,
'.sld.do'
,
'.sld.pa'
,
'.slg.br'
,
'.slupsk.pl'
,
'.sm'
,
'.sn'
,
'.sn.cn'
,
'.so'
,
'.soc.lk'
,
'.sport.hu'
,
'.sr'
,
'.srv.br'
,
'.st'
,
'.stat.no'
,
'.su'
,
'.suli.hu'
,
'.sumy.ua'
,
'.sv'
,
'.sx.cn'
,
'.sy'
,
'.sz'
,
'.szczecin.pl'
,
'.szex.hu'
,
'.t.se'
,
'.tc'
,
'.td'
,
'.te.ua'
,
'.tel.tr'
,
'.ternopil.ua'
,
'.tf'
,
'.tg'
,
'.th'
,
'.tj'
,
'.tj'
,
'.tj.cn'
,
'.tk'
,
'.tl'
,
'.tm'
,
'.tm.cy'
,
'.tm.fr'
,
'.tm.hu'
,
'.tm.mc'
,
'.tm.mg'
,
'.tm.se'
,
'.tm.za'
,
'.tmp.br'
,
'.tn'
,
'.tn.us'
,
'.to'
,
'.to'
,
'.to'
,
'.tochigi.jp'
,
'.tokushima.jp'
,
'.tokyo.jp'
,
'.torun.pl'
,
'.tottori.jp'
,
'.tourism.tn'
,
'.toyama.jp'
,
'.tozsde.hu'
,
'.tp'
,
'.tr'
,
'.travel'
,
'.trd.br'
,
'.tt'
,
'.tt'
,
'.tur.br'
,
'.tv'
,
'.tv'
,
'.tv.bo'
,
'.tv.br'
,
'.tv.sd'
,
'.tw'
,
'.tw'
,
'.tw'
,
'.tw'
,
'.tw'
,
'.tx.us'
,
'.tz'
,
'.u.se'
,
'.ua'
,
'.ua'
,
'.ug'
,
'.ug'
,
'.uk'
,
'.um'
,
'.uri.arpa'
,
'.urn.arpa'
,
'.us'
,
'.us'
,
'.ut.us'
,
'.utazas.hu'
,
'.uy'
,
'.uz'
,
'.uzhgorod.ua'
,
'.va'
,
'.va.us'
,
'.vatican.va'
,
'.vc'
,
'.ve'
,
'.vet.br'
,
'.vg'
,
'.vgs.no'
,
'.vi'
,
'.vi'
,
'.video.hu'
,
'.vinnica.ua'
,
'.vn'
,
'.vn'
,
'.vn.ua'
,
'.vt.us'
,
'.vuwf'
,
'.w.se'
,
'.wa.us'
,
'.wakayama.jp'
,
'.warszawa.pl'
,
'.waw.pl'
,
'.weather.mobi'
,
'.web.do'
,
'.web.lk'
,
'.web.pk'
,
'.web.tj'
,
'.web.tr'
,
'.web.ve'
,
'.web.za'
,
'.wi.us'
,
'.wroc.pl'
,
'.wroclaw.pl'
,
'.wv.us'
,
'.wy.us'
,
'.x.se'
,
'.xj.cn'
,
'.xz.cn'
,
'.y.se'
,
'.yamagata.jp'
,
'.yamaguchi.jp'
,
'.yamanashi.jp'
,
'.ye'
,
'.yk.ca'
,
'.yn.cn'
,
'.yokohama.jp'
,
'.yt'
,
'.yu'
,
'.z.se'
,
'.za'
,
'.zaporizhzhe.ua'
,
'.zhitomir.ua'
,
'.zj.cn'
,
'.zlg.br'
,
'.zm'
,
'.zp.ua'
,
'.zt.ua'
,
'.zw'
))
if
__name__
==
"__main__"
:
for
item
in
[
'http://something.unknown'
,
'http://a.b.c.something.unknown'
,
'http://something'
,
'http://google.com'
,
'http://a.b.c.d.e.google.com'
,
'http://something.uk'
,
'http://aa.bb.cc.dd.ee.ff.gg.guardian.co.uk'
,
'http://guardian.co.uk'
,
'http://www.guardian.co.uk'
,
'http://www.google.com'
,
'http://wikipedia.org'
,
'http://www.wikipedia.org'
,
''
,
None
,
'whatever'
]:
for
level
in
range
(
0
,
5
):
print
"url=
%s
, levels=
%s
=>
%s
"
%
(
item
,
level
,
parse_domain
(
item
,
level
))