Mit this file of effective tlds die someone else auf Mozilla-Website zu finden:
from __future__ import with_statement
from urlparse import urlparse
# load tlds, ignore comments and empty lines:
with open("effective_tld_names.dat.txt") as tld_file:
tlds = [line.strip() for line in tld_file if line[0] not in "/\n"]
def get_domain(url, tlds):
url_elements = urlparse(url)[1].split('.')
# url_elements = ["abcde","co","uk"]
for i in range(-len(url_elements), 0):
last_i_elements = url_elements[i:]
# i=-3: ["abcde","co","uk"]
# i=-2: ["co","uk"]
# i=-1: ["uk"] etc
candidate = ".".join(last_i_elements) # abcde.co.uk, co.uk, uk
wildcard_candidate = ".".join(["*"] + last_i_elements[1:]) # *.co.uk, *.uk, *
exception_candidate = "!" + candidate
# match tlds:
if (exception_candidate in tlds):
return ".".join(url_elements[i:])
if (candidate in tlds or wildcard_candidate in tlds):
return ".".join(url_elements[i-1:])
# returns "abcde.co.uk"
raise ValueError("Domain not in global list of TLDs")
print get_domain("http://abcde.co.uk", tlds)
Ergebnisse in:
abcde.co.uk
würde ich es begrüßen, wenn jemand mich wissen lassen, welche Bits der oben in einer pythonic Weise neu geschrieben werden können. Zum Beispiel muss es eine bessere Möglichkeit geben, über die last_i_elements
Liste zu iterieren, aber mir fällt keine ein. Ich weiß auch nicht, ob ValueError
die beste Sache ist, um zu erhöhen. Bemerkungen?
Eine verwandte Frage zuvor auf Stack-Überlauf: http://stackoverflow.com/questions/569137/how-to-get-domain-name-from-url –
+1: Der "verein Versuch" in diesem Frage funktioniert gut für mich, auch wenn es ironischerweise nicht für den Autor funktioniert. – ArtOfWarfare
Ähnliche Fragen: http://stackoverflow.com/questions/14406300/python-urlparse-extract-domain-name-without-subdomain – user2314737