amit
tengo una url como:
http://abc.hostname.com/somethings/anything/
Quiero tener:
hostname.com
¿Qué módulo puedo usar para lograr esto?
Quiero usar el mismo módulo y método en python2.
Para analizar el dominio de una URL en Python 3, puede usar:
from urllib.parse import urlparse
domain = urlparse('http://www.example.test/foo/bar').netloc
print(domain) # --> www.example.test
Sin embargo, para analizar de forma fiable el dominio de nivel superior (example.test
en este ejemplo), necesita instalar una biblioteca especializada (por ejemplo, tlextracto).
philshem
En lugar de expresiones regulares o soluciones escritas a mano, puede usar python urlparse
from urllib.parse import urlparse
print(urlparse('http://abc.hostname.com/somethings/anything/'))
>> ParseResult(scheme="http", netloc="abc.hostname.com", path="/somethings/anything/", params="", query='', fragment="")
print(urlparse('http://abc.hostname.com/somethings/anything/').netloc)
>> abc.hostname.com
Para obtener sin el subdominio
t = urlparse('http://abc.hostname.com/somethings/anything/').netloc
print ('.'.join(t.split('.')[-2:]))
>> hostname.com
-
En Python3 la biblioteca
urlparse
fue renombrado aurllib.parse
.– APeter
21 de noviembre de 2018 a las 15:15
-
¿Funcionará con algo como test.mytest.example.com?
– qasimzee
26 mayo 2020 a las 18:31
-
@qasimzee no lo hará, está recibiendo todo desde el principio
.
adelante– gdvalderrama
9 dic 2021 a las 10:52
-
fallará con
*.co.uk
o*.ac.uk
dominios– mamá84
10 de febrero a las 16:25
-
t.split('.')[-2:]
literalmente mantiene solo las dos últimas subcadenas, por lo que me temo que simplemente regresaráco.uk
yac.uk
ya sea que lo anteponga o no.– mamá84
11 de febrero a las 10:15
Subramanian Deivanai
Puedes usar tlextracto.
Código de ejemplo:
from tldextract import extract
tsd, td, tsu = extract("http://abc.hostname.com/somethings/anything/") # prints abc, hostname, com
url = td + '.' + tsu # will prints as hostname.com
print(url)
-
tldextract
no es una biblioteca estándar (al menos no en Python 2.7), creo que deberías mencionarlo. Todavía +1– señora
22 mayo 2017 a las 17:57
-
¡Funciona bien! Pero, no se pudieron encontrar controladores para el registrador “tldextract”, cómo manejar esto.
– D09r
21 de junio de 2018 a las 14:01
Suponiendo que lo tenga en una cadena accesible, y suponiendo que queremos ser genéricos para tener varios niveles en el dominio superior, podría:
token=my_string.split('http://')[1].split("https://stackoverflow.com/")[0]
top_level=token.split('.')[-2]+'.'+token.split('.')[-1]
Nos separamos primero por el http://
para eliminar eso de la cadena. Luego nos separamos por el /
para eliminar todas las partes del directorio o subdirectorio de la cadena, y luego el [-2]
significa que tomamos la penúltima ficha después de una .
y agréguelo con el último token, para darnos el dominio de nivel superior.
Probablemente hay formas más elegantes y sólidas de hacer esto, por ejemplo, si su sitio web es http://.com
se romperá, pero es un comienzo 🙂
Sathish Kumar VG
Tratar:
from urlparse import urlparse
parsed = urlparse('http://abc.hostname.com/somethings/anything/')
domain = parsed.netloc.split(".")[-2:]
host = ".".join(domain)
print host # will prints hostname.com
-
no funcionará con .co.uk
– Quintín
10 de febrero de 2021 a las 16:48
-
no funcionará con .co.uk
– Quintín
10 de febrero de 2021 a las 16:48
Me imagino que podrías usar expresiones regulares.
– Mike – SMT
22 de mayo de 2017 a las 12:52
Puedes simplemente usar str.split(), es fácil
– voltento
22 de mayo de 2017 a las 12:54
url.split(‘/’)[2] le dará ‘abc.hostname.com’, puede extraerlo usando split o re cualquier método.
– Gahan
22 de mayo de 2017 a las 12:58
tal vez un duplicado, pero mejores respuestas aquí
–Joey Baruch
2 de marzo a las 5:03