Por ejemplo, la dirección es:Obtener subdominio de la URL usando Python
Address = http://lol1.domain.com:8888/some/page
Quiero salvar el subdominio en una variable por lo que podía hacer, como así;
print SubAddr
>> lol1
Por ejemplo, la dirección es:Obtener subdominio de la URL usando Python
Address = http://lol1.domain.com:8888/some/page
Quiero salvar el subdominio en una variable por lo que podía hacer, como así;
print SubAddr
>> lol1
urlparse.urlparse
dividirá el URL en el protocolo, la ubicación, el puerto, etc. A continuación, puede dividir la ubicación por .
para obtener el subdominio.
url = urlparse.urlparse(address)
subdomain = url.hostname.split('.')[0]
Funciona muy bien. Lo usé como si Node = urlparse.urlparse (address) .hostname.split ('.') [0] – Marko
¿Qué pasa si se trata de una dirección IP? ¿Y qué pasa si tiene un subdominio de segundo nivel? – naktinis
Los subdominios pueden contener puntos múltiples por lo que 'api.test' también es válido, solo téngalo en cuenta. Si desea un buen paquete para hacer esto, consulte 'https: // pypi.python.org/pypi/tldextract'. – sidneydobber
Un enfoque muy básico, sin ningún tipo de cordura comprobación podría parecerse a:
address = 'http://lol1.domain.com:8888/some/page'
host = address.partition('://')[2]
sub_addr = host.partition('.')[0]
print sub_addr
Por supuesto, esto supone que cuando se dice 'subdominio' quiere decir la primera parte de un nombre de host, por lo que en el siguiente caso, 'www' sería el subdominio:
es eso lo que quiere decir?
para extraer el nombre de host, que haría uso de urlparse urllib2:
>>> from urllib2 import urlparse
>>> a = "http://lol1.domain.com:8888/some/page"
>>> urlparse.urlparse(a).hostname
'lol1.domain.com'
En cuanto a la manera de extraer el subdominio, es necesario cubrir para el caso de que no FQDN podría ser más largo. Cómo harías esto dependería de tus propósitos. Podría sugerir quitar los dos componentes más adecuados.
E.g.
>>> urlparse.urlparse(a).hostname.rpartition('.')[0].rpartition('.')[0]
'lol1'
Lo que buscas está en: http://docs.python.org/library/urlparse.html
por ejemplo: ".".join(urlparse('http://www.my.cwi.nl:80/%7Eguido/Python.html').netloc.split(".")[:-2])
hará el trabajo para usted (volverá "www.my")
Esto supone que el nombre de dominio principal tiene dos partes, que se caen en ciertos casos, p. '.co.uk' direcciones. Además del Reino Unido, Israel, Brasil y Japón tienen dominios formales de segundo nivel, y probablemente haya otros. –
Mi respuesta se ocupa de este problema usando una lista de TLD válidos. – Acorn
Modificado versión de la respuesta fantástica aquí: How to extract top-level domain name (TLD) from URL
Tendrá la lista de dominios de nivel superior eficaces de 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
le ofrece:
Domain: example Subdomains: ['sub2', 'sub1'] TLD: co.uk
¡Un viejo pero bueno! – FredTheWebGuy
mejor que esto. –
paquete tldextract hace esta tarea muy fácil, y luego se puede utilizar urlparse como se sugiere si necesita más información:
>> 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='')
Tenga en cuenta que tldextract maneja adecuadamente los subdominios.
Esta debería ser la respuesta. Gracias. –
Estas preguntas deberían ser útiles: http://stackoverflow.com/questions/1066933/python-extract-domain-name-from-url – Acorn