從一個域名里面提取主域名,初想起來,貌似很簡單,不就是數點[.]的個數嗎?取最后一個點前后的字符串,那 abc.txt 是域名嗎?那再加個驗證,加上國家碼,.com,.cn,.org結尾的才算,那這個域名呢(www.freelancer.co.ro),它的主域名到底是freelancer.co.ro呢,還是co.ro?
還好,Python從不缺少第三方庫,有貢獻者已經幫我們造好了輪子tldextract(https://github.com/john-kurkowski/tldextract)。
安裝
pip install tldextract
示例
>>> import tldextract
>>> val = tldextract.extract("https://www.ymw.cn/")
>>> val
ExtractResult(subdomain='www', domain='ymw', suffix='cn')
>>> "{0}.{1}".format(val.domain, val.suffix) #主域名
'ymw.cn'
>>> tldextract.extract("aa.txt")
ExtractResult(subdomain='aa', domain='txt', suffix='')
>>> #后綴為空,不是域名
>>>
02
再探一步
如果只是簡單使用,上面的代碼已經足以,我們再稍稍前進一步。
第一次提取主域名的時候,此包會訪問域名后綴網站(https://publicsuffix.org/list/public_suffix_list.dat),生成一個域名后綴集合(.td_set,["ac", "com.ac", "edu.ac", "gov.ac", ... , "zip", "zippo", "zone", "zuerich"] ),有了這個集合,我們就可以定期更新,離線安裝使用了。
離線使用
將.tld_set文件拷貝出來,離線使用。