Przykładowo, adres:Get subdomenę z URL przy użyciu Python
Address = http://lol1.domain.com:8888/some/page
chcę zapisać subdomenę do zmiennej tak mogę zrobić jak tak;
print SubAddr
>> lol1
Przykładowo, adres:Get subdomenę z URL przy użyciu Python
Address = http://lol1.domain.com:8888/some/page
chcę zapisać subdomenę do zmiennej tak mogę zrobić jak tak;
print SubAddr
>> lol1
urlparse.urlparse
podzieli URL do protokołu, lokalizacji portu itp Następnie można podzielić lokalizację .
uzyskać subdomeny.
url = urlparse.urlparse(address)
subdomain = url.hostname.split('.')[0]
Działa bardzo dobrze. Użyłem go tak, jak Node = urlparse.urlparse (address) .hostname.split ('.') [0] – Marko
Co jeśli jest to adres IP? A co, jeśli ma subdomenę drugiego poziomu? – naktinis
Subdomeny mogą zawierać wiele kropek, więc 'api.test' jest również ważny, należy o tym pamiętać. Jeśli potrzebujesz dobrego pakietu do tego, sprawdź 'https: // pypi.python.org/pypi/tldextract'. – sidneydobber
Bardzo podstawowe podejście, bez rozsądku kontrola mogłaby wyglądać następująco:
address = 'http://lol1.domain.com:8888/some/page'
host = address.partition('://')[2]
sub_addr = host.partition('.')[0]
print sub_addr
To oczywiście zakłada, że kiedy mówisz „subdomeny” masz na myśli pierwszą część nazwy hosta, a więc w następujący przypadek: 'www' byłaby subdomeny:
że to, co masz na myśli?
do wydobywania hosta, użyję urlparse z urllib2:
>>> from urllib2 import urlparse
>>> a = "http://lol1.domain.com:8888/some/page"
>>> urlparse.urlparse(a).hostname
'lol1.domain.com'
, jak wyodrębnić subdomenę, trzeba pokryć w przypadku, gdy istnieje FQDN może być dłuższy. Sposób, w jaki to zrobisz, zależy od twoich celów. Mogę zasugerować zdejmowanie dwóch najbardziej prawych komponentów.
E.g.
>>> urlparse.urlparse(a).hostname.rpartition('.')[0].rpartition('.')[0]
'lol1'
Co szukasz jest: http://docs.python.org/library/urlparse.html
na przykład: ".".join(urlparse('http://www.my.cwi.nl:80/%7Eguido/Python.html').netloc.split(".")[:-2])
zrobi dla ciebie zadanie (powróci "www.my")
Zakłada się, że główna nazwa domeny składa się z dwóch części - która w niektórych przypadkach zostanie utracona, np. adresy .co.uk'. Poza Wielką Brytanią, Izraelem, Brazylią i Japonią wszystkie mają formalne domeny drugiego poziomu i prawdopodobnie są też inne. –
Moja odpowiedź dotyczy tego problemu przy użyciu listy prawidłowych TLD. – Acorn
Modified wersja fantastycznej odpowiedzi tutaj: How to extract top-level domain name (TLD) from URL
Musisz listę skutecznych TLD z here
from __future__ import with_statement
from urlparse import urlparse
# load tlds, ignore comments and empty lines:
with open("effective_tld_names.dat.txt") as tldFile:
tlds = [line.strip() for line in tldFile if line[0] not in "/\n"]
class DomainParts(object):
def __init__(self, domain_parts, tld):
self.domain = None
self.subdomains = None
self.tld = tld
if domain_parts:
self.domain = domain_parts[-1]
if len(domain_parts) > 1:
self.subdomains = domain_parts[:-1]
def get_domain_parts(url, tlds):
urlElements = urlparse(url).hostname.split('.')
# urlElements = ["abcde","co","uk"]
for i in range(-len(urlElements),0):
lastIElements = urlElements[i:]
# i=-3: ["abcde","co","uk"]
# i=-2: ["co","uk"]
# i=-1: ["uk"] etc
candidate = ".".join(lastIElements) # abcde.co.uk, co.uk, uk
wildcardCandidate = ".".join(["*"]+lastIElements[1:]) # *.co.uk, *.uk, *
exceptionCandidate = "!"+candidate
# match tlds:
if (exceptionCandidate in tlds):
return ".".join(urlElements[i:])
if (candidate in tlds or wildcardCandidate in tlds):
return DomainParts(urlElements[:i], '.'.join(urlElements[i:]))
# returns ["abcde"]
raise ValueError("Domain not in global list of TLDs")
domain_parts = get_domain_parts("http://sub2.sub1.example.co.uk:80",tlds)
print "Domain:", domain_parts.domain
print "Subdomains:", domain_parts.subdomains or "None"
print "TLD:", domain_parts.tld
Daje:
Domain: example Subdomains: ['sub2', 'sub1'] TLD: co.uk
Staruszek, ale dobry! – FredTheWebGuy
lepiej niż to. –
Pakiet tldextract sprawia, że jest to zadanie bardzo łatwe, a następnie można użyć urlparse jak sugeruje jeśli potrzebujesz dalszych informacji:
>> import tldextract
>> tldextract.extract("http://lol1.domain.com:8888/some/page"
ExtractResult(subdomain='lol1', domain='domain', suffix='com')
>> tldextract.extract("http://sub.lol1.domain.com:8888/some/page"
ExtractResult(subdomain='sub.lol1', domain='domain', suffix='com')
>> urlparse.urlparse("http://sub.lol1.domain.com:8888/some/page")
ParseResult(scheme='http', netloc='sub.lol1.domain.com:8888', path='/some/page', params='', query='', fragment='')
Należy pamiętać, że tldextract poprawnie obsługuje subdomeny.
To powinna być odpowiedź. Dziękuję Ci. –
To pytanie powinno być przydatne: http://stackoverflow.com/questions/1066933/python-extract-domain-name-from-url – Acorn