Как извлечь доменное имя верхнего уровня (TLD) из URL

используйте:

`#define sgn(x) (x<0)` 

, например:

`if(sng(n)) { etc ....}`

Или, возможно, вы захотите использовать какой-то сложный код, но сначала выполните приведение:

inline bool sgn_long(long x) { return ((x<0)? true: false); }

49
задан John Carter 21 January 2015 в 18:26
поделиться

3 ответа

Нет, не существует "внутреннего" способа узнать, что (например) zap.co.it является субдоменом (потому что регистратор в Италии ВСЕГДА продает такие домены, как ] co.it ), а zap.co.uk не является (поскольку регистратор в Великобритании НЕ продает такие домены, как co.uk , а только например zap.co.uk ).

Вам просто нужно будет использовать вспомогательную таблицу (или онлайн-источник), чтобы сообщить вам, какие TLD ведут себя особенно похоже на британские и австралийские - нет никакого способа предугадать это от простого взгляда на строку без таких дополнительных семантических знаний (конечно, со временем это может измениться, но если вы найдете хороший онлайн-источник, этот источник также изменится соответственно, можно надеяться! -).

43
ответ дан 7 November 2019 в 11:17
поделиться

Существует много-много TLD. Вот список:

http://data.iana.org/TLD/tlds-alpha-by-domain.txt

Вот еще один список

http://en.wikipedia.org/wiki/List_of_Internet_top -level_domains

Вот еще один список

http://www.iana.org/domains/root/db/

2
ответ дан 7 November 2019 в 11:17
поделиться

Использование этого файла эффективных TLD , который кто-то другой нашел на веб-сайте Mozilla:

from __future__ import with_statement
from urlparse import urlparse

# load tlds, ignore comments and empty lines:
with open("effective_tld_names.dat.txt") as tld_file:
    tlds = [line.strip() for line in tld_file if line[0] not in "/\n"]

def get_domain(url, tlds):
    url_elements = urlparse(url)[1].split('.')
    # url_elements = ["abcde","co","uk"]

    for i in range(-len(url_elements), 0):
        last_i_elements = url_elements[i:]
        #    i=-3: ["abcde","co","uk"]
        #    i=-2: ["co","uk"]
        #    i=-1: ["uk"] etc

        candidate = ".".join(last_i_elements) # abcde.co.uk, co.uk, uk
        wildcard_candidate = ".".join(["*"] + last_i_elements[1:]) # *.co.uk, *.uk, *
        exception_candidate = "!" + candidate

        # match tlds: 
        if (exception_candidate in tlds):
            return ".".join(url_elements[i:]) 
        if (candidate in tlds or wildcard_candidate in tlds):
            return ".".join(url_elements[i-1:])
            # returns "abcde.co.uk"

    raise ValueError("Domain not in global list of TLDs")

print get_domain("http://abcde.co.uk", tlds)

дает:

abcde.co.uk

Я был бы признателен если кто-нибудь дадут мне знать, какие части из вышеперечисленного можно переписать более питоническим способом. Например, должен быть лучший способ перебора списка last_i_elements , но я не мог его придумать. Я также не знаю, лучше ли поднимать ValueError . Комментарии?

42
ответ дан 7 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: