Cómo obtener el nombre de dominio (nombre + TLD) de una URL en python

Quiero extraer el nombre de dominio (nombre del sitio + TLD) de una lista de URL que pueden variar en su formato. por ejemplo: estado actual —-> lo que quiero

mail.yahoo.com------> yahoo.com account.hotmail.co.uk---->hotmail.co.uk x.it--->x.it google.mail.com---> google.com 

¿Hay algún código de Python que pueda ayudarme a extraer lo que quiero de la URL o debo hacerlo manualmente?

Esto es algo no trivial, ya que no existe una regla simple para determinar qué hace un sufijo público válido (nombre del sitio + TLD). En cambio, lo que hace que un sufijo público se mantenga como una lista en PublicSuffix.org .

Existe un paquete de Python que consulta esa lista (almacenada localmente); se llama publicsuffix :

 >>> from publicsuffix import PublicSuffixList >>> psl = PublicSuffixList() >>> print psl.get_public_suffix('mail.yahoo.com') yahoo.com >>> print psl.get_public_suffix('account.hotmail.co.uk') hotmail.co.uk 

Hay una lista pública de TLD y CC TLD que se mantiene.

Este proyecto de Python lee esta lista y compara su URL con esta lista.

 https://github.com/john-kurkowski/tldextract 

Usando python tld

https://pypi.python.org/pypi/tld

$ pip install tld

 from tld import get_tld print get_tld("http://www.google.co.uk/some-page/some-sub-page/") 'google.co.uk' 

En este momento veo seis paquetes haciendo división de nombres de dominio:

Se diferencian en la forma en que almacenan en caché los datos de la lista de sufijos públicos (solo tldextract utiliza un archivo JSON, por lo tanto, evita analizar la lista en la carga), en la estrategia utilizada para descargar esos datos y en la estructura que mantienen en la memoria (respectivamente: frozenset , conjunto, conjunto, diccionarios de tags, ídem, diccionario de nombres) que determina el algoritmo de búsqueda.