如何從URL中快速提取域名?
有時(shí)候,我們要從一段很長(zhǎng)的 URL 里面提取出域名。例如從
https://www.kingname.info/2020/10/02/copy-from-ssh/,我需要獲取的是kingname.info。
可能有人會(huì)這樣寫代碼:
- url = 'https://www.kingname.info/2020/10/02/copy-from-ssh/'
- domain = '.'.join(url.split('/')[2].split('.')[1:])
運(yùn)行效果如下圖所示:
但如果我給出的 URL 沒有帶 https://,這段代碼的結(jié)果就有問題。
而且,有些域名可能有三級(jí)、四級(jí)域名,例如:blog.exercise.kingname.com.cn。顯然,使用點(diǎn)分割以后,也不知道怎么拿到真正的域名kingname.com.cn。
還有一些人的需求可能只需要域名中的名字,例如kingname.info只要kingname,google.com.hk只要google。
對(duì)于這些需求,如果手動(dòng)寫規(guī)則來提取的話,會(huì)非常麻煩。
不過好在 Python 有一個(gè)第三方庫(kù)已經(jīng)解決了這個(gè)問題,這就是tld。
我們先來安裝它:
- python3 -m pip install tld
安裝完成以后,我們來看看它的使用方法:
- >>> url = 'https://www.kingname.info/2020/10/02/copy-from-ssh/'
- >>> from tld import get_tld
- >>> result = get_tld(url, as_object=True)
- >>> domain = result.domain
- >>> print(domain)
- kingname
- >>> domain_with_suffix = result.fld
- >>> print(domain_with_suffix)
- kingname.info
首先使用get_tld生成一個(gè)對(duì)象,然后通過對(duì)象的.domain屬性獲得純域名,使用.fld屬性,獲得帶有后綴的域名。
運(yùn)行效果如下圖所示:
對(duì)于不含https的網(wǎng)址,直接使用會(huì)報(bào)錯(cuò),如下圖所示:
但只要加上一個(gè)參數(shù)fix_protocol=True就可以解決問題:




























