доменное имя Python разделить имя и расширение - PullRequest
5 голосов
/ 26 мая 2010

Как бы вы разбили доменное имя, которое вернет имя и расширение

Ответы [ 8 ]

6 голосов
/ 18 ноября 2017

Ух ты, здесь много плохих ответов. Вы можете только сделать это, если знаете, что находится в открытом списке суффиксов. Если вы используете split или регулярное выражение или что-то еще, вы делаете это неправильно.

К счастью, это Python, и есть библиотека для этого: https://pypi.python.org/pypi/tldextract

Из их readme:

>>> import tldextract
>>> tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')

ExtractResult это именованный кортеж. Делает это довольно легко.

Преимущество использования подобной библиотеки состоит в том, что они будут идти в ногу с дополнениями в общедоступном списке суффиксов, поэтому вам не нужно это делать.

4 голосов
/ 26 мая 2010

В зависимости от вашего приложения, будьте осторожны с тем, чтобы просто взять часть, следующую за последним '.'. Это хорошо работает для доменов .com, .net, .org и т. Д., Но, скорее всего, отразится на многих доменах верхнего уровня Code . Например. bit.ly или google.co.uk .

(Под этим я подразумеваю, что «bit.ly», вероятно, предпочитает быть идентифицированным , включая .ly TLD, тогда как Google, вероятно, не хочет идентифицировать себя с поддельным .co остаток. Очевидно, это будет зависеть от того, что вы делаете).

В этих сложных случаях ... ну, у тебя есть работа, я подозреваю!

Надежный ответ, вероятно, будет зависеть от того, как вы собираете / храните свои домены и что вы действительно хотите вернуть в качестве «имени».

Например, если у вас есть набор доменных имен без информации о поддоменах, вы можете сделать то, что предложено выше, и просто снять первую часть:

>>> "stackoverflow.com".split('.')[0]
'stackoverflow'
3 голосов
/ 26 мая 2010
domain = 'subdomain.domain.ext'
name, ext = domain.split('.')[-2:]
2 голосов
/ 26 мая 2010

Вы имеете в виду доменное имя в Интернете, например, www.stackoverflow.com? Если так, то просто используйте:

>>> 'www.stackoverflow.com'.rsplit('.', 1)
['www.stackoverflow', 'com']
1 голос
/ 24 июня 2010

В общем, нелегко определить, где заканчивается зарегистрированный пользователем бит и начинается регистрационный бит. Например: a.com, b.co.uk, c.us, d.ca.us, e.uk.com, f.pvt.k12.wy.us ...

У хороших людей в Mozilla есть проект, посвященный перечислению доменных суффиксов, под которым публика может регистрировать домены: http://publicsuffix.org/

1 голос
/ 24 июня 2010

Я думаю, вы найдете urlparse модуль интересным: http://docs.python.org/library/urlparse.html

0 голосов
/ 05 ноября 2018

Это то, что я придумал. Ничего фантастического. Меня устраивает. Хотя я верю, что иногда это дает странные отзывы, когда есть такие символы, как?, + И так далее. Все еще не понимаю, почему.

scheme = 'https://www.msn.com/d/1234.php?=https://www.msn.com?+'
notfound = -1
https = scheme.rfind('http://')
com = scheme.rfind('.com')
if https != notfound:
    if com != notfound:
        domain = scheme[https:com+len('.com')]
        return scheme[https:com+len('.com')]

#Here we can grab the double suffix. This one has not been fully tested.

def getdoublesuffix(domain):
    '''
    :description: returns double dot TLD suffix endings or returns -1
    :function: 
    '''
    # ['www.domain.co.com'] to
    # ['www.domain', 'co', 'com']
    dots = domain.rsplit(sep='.', maxsplit=2)
# count dots by enumeration not string count! Only interested in enumeration count and
# not total dot count since it is split by '.' as a separator.
    for number, value in enumerate(dots, 0):
        value = value
        number = number
    if number is 2:
        # co.com
        result = '{0}.{1}'.format(dots[1], dots[2])
        return result
    else:
        #return that we do not have a domain ending in two dot notation.
        return -1
0 голосов
/ 24 июня 2010

Если вы всегда хотите получить последнюю часть доменного имени, вы можете:

subdomain, _, domain= fqdn.rpartition('.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...