Holen Sie sich Root Domain of Link

Ich habe einen Link wie http://www.techcrunch.com/ und ich möchte nur die techcrunch.com Teil des Links zu bekommen. Wie gehe ich das in Python?

    6 Solutions collect form web for “Holen Sie sich Root Domain of Link”

    Der Hostname ist einfach genug mit urlparse :

    hostname = urlparse.urlparse("http://www.techcrunch.com/").hostname 

    Das Erhalten der "Root-Domain" wird jedoch problematischer sein, weil es nicht in einem syntaktischen Sinne definiert ist. Was ist die Domain von "www.theregister.co.uk"? Wie wäre es mit Netzwerken mit Standarddomänen? "Devbox12" könnte ein gültiger Hostname sein.

    Für die häufigsten Fälle, aber Sie können wahrscheinlich behandeln die ehemaligen besonders und ignorieren die letzteren, aber bewusst, dass es nicht 100% genau.

     hostname = urlparse.urlparse(url).hostname.split(".") hostname = ".".join(len(hostname[-2]) < 4 and hostname[-3:] or hostname[-2:]) 

    Dies nutzt die letzten drei Teile, wenn der nächstletzte Teil weniger als vier Zeichen ist (zB ".com.au", ".co.uk") und die letzten beiden Teile sonst.

    ______Unter Python 3.3 und nicht 2.x ________

    Ich möchte eine kleine Sache zu Ben Blanks Antwort hinzufügen.

     from urllib.parse import quote,unquote,urlparse u=unquote(u) #u= URL eg http://twitter.co.uk/hello/there g=urlparse(u) u=g.netloc 

    Inzwischen habe ich gerade den Domainnamen von urlparse bekommen .

    Um die Subdomains zu entfernen, muss man zunächst wissen, welche Top-Level-Domains sind und welche nicht. ZB in der oben genannten http://twitter.co.ukco.uk ist eine TLD während in http://sub.twitter.com wir nur .com als TLD und sub ist eine Subdomain.

    Also, wir müssen eine Datei / Liste, die alle tlds hat bekommen .

    tlds = load_file("tlds.txt") #tlds holds the list of tlds

     hostname = u.split(".") if len(hostname)>2: if hostname[-2].upper() in tlds: hostname=".".join(hostname[-3:]) else: hostname=".".join(hostname[-2:]) else: hostname=".".join(hostname[-2:]) 

    Allgemeine Struktur der URL:

    Scheme: // netloc / path; Parameter? Abfrage # Fragment

    Wie TIMTOWTDI- Motto:

    Mit urlparse ,

     >>> from urllib.parse import urlparse # python 3.x >>> parsed_uri = urlparse('http://www.stackoverflow.com/questions/41899120/whatever') # returns six components >>> domain = '{uri.netloc}/'.format(uri=parsed_uri) >>> result = domain.replace('www.', '') # as per your case >>> print(result) 'stackoverflow.com/' 

    Mit tldextract ,

     >>> import tldextract # The module looks up TLDs in the Public Suffix List, mantained by Mozilla volunteers >>> tldextract.extract('http://forums.news.cnn.com/') ExtractResult(subdomain='forums.news', domain='cnn', suffix='com') 

    in Ihrem Fall:

     >>> extracted = tldextract.extract('http://www.techcrunch.com/') >>> '{}.{}'.format(extracted.domain, extracted.suffix) 'techcrunch.com' 

    tldextract auf der anderen Seite weiß, was alle gTLDs [ Generic Top-Level Domains ] und ccTLDs [ Country Code Top-Level Domains ] aussehen, indem sie die derzeit lebenden nach der Public Suffix List aufblicken. Also, bei einer URL, kennt es seine Subdomain aus seiner Domain und ihre Domain aus seinem Ländercode.

    Cheerio! 🙂

    Das folgende Skript ist nicht perfekt, kann aber für Anzeige- / Verkürzungszwecke verwendet werden. Wenn Sie wirklich wollen, um zu vermeiden, dass Drittanbieter-Abhängigkeiten – vor allem Remote-Abrufen und Zwischenspeichern einige tld-Daten kann ich Ihnen vorschlagen, Skript, die ich in meinen Projekten verwenden. Es verwendet letzte zwei Teile der Domain für die meisten gängigen Domain-Erweiterungen und verlässt drei Teile für den Rest der weniger bekannten Domain-Erweiterungen. Im schlimmsten Fall wird die Szenario-Domain drei Teile anstelle von zwei haben:

     from urlparse import urlparse def extract_domain(url): parsed_domain = urlparse(url) domain = parsed_domain.netloc or parsed_domain.path # Just in case, for urls without scheme domain_parts = domain.split('.') if len(domain_parts) > 2: return '.'.join(domain_parts[-(2 if domain_parts[-1] in { 'com', 'net', 'org', 'io', 'ly', 'me', 'sh', 'fm', 'us'} else 3):]) return domain extract_domain('google.com') # google.com extract_domain('www.google.com') # google.com extract_domain('sub.sub2.google.com') # google.com extract_domain('google.co.uk') # google.co.uk extract_domain('sub.google.co.uk') # google.co.uk extract_domain('www.google.com') # google.com extract_domain('sub.sub2.voila.fr') # sub2.voila.fr 
     def get_domain(url): u = urlsplit(url) return u.netloc def get_top_domain(url): u""" >>> get_top_domain('http://www.google.com') 'google.com' >>> get_top_domain('http://www.sina.com.cn') 'sina.com.cn' >>> get_top_domain('http://bbc.co.uk') 'bbc.co.uk' >>> get_top_domain('http://mail.cs.buaa.edu.cn') 'buaa.edu.cn' """ domain = get_domain(url) domain_parts = domain.split('.') if len(domain_parts) < 2: return domain top_domain_parts = 2 # if a domain's last part is 2 letter long, it must be country name if len(domain_parts[-1]) == 2: if domain_parts[-1] in ['uk', 'jp']: if domain_parts[-2] in ['co', 'ac', 'me', 'gov', 'org', 'net']: top_domain_parts = 3 else: if domain_parts[-2] in ['com', 'org', 'net', 'edu', 'gov']: top_domain_parts = 3 return '.'.join(domain_parts[-top_domain_parts:]) 

    Das hat für meine Zwecke gearbeitet. Ich dachte, ich würde es teilen.

     ".".join("www.sun.google.com".split(".")[-2:]) 
    Python ist die beste Programmiersprache der Welt.