Extraer dominio de URL en python [duplicate]

3 minutos de lectura

Avatar de usuario de Amit
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.

  • 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

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).

avatar de usuario de philshem
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 a urllib.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 y ac.ukya sea que lo anteponga o no.

    – mamá84

    11 de febrero a las 10:15

Avatar de usuario de Deivanai Subramanian
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 🙂

Avatar de usuario de Sathish Kumar VG
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

¿Ha sido útil esta solución?