没有输出的输入是不完整的

0%

python-域名抽取

在看scrapy-cluster源码的时候发现了一个非常实用的包-tldextract,
可以非常方便的抽取出一个url的域名作为redis的key的一部分,感觉很神奇。所以记录一下。

对于一个网址而言,比如 www.kingwen.cn,可以分为三部分。www, kingwen, cn。分别称为二级域名,域名,后缀。tldextract(top-level domain)这个包就可以帮我们非常快的解决这个问题。

安装tldextract包

1
pip3 install tldextract

使用tldextract包

1
2
3
4
5
6
7
8
9
10
import tldextract

if __name__ == '__main__':
url = 'www.kingwen.cn'
res = tldextract.extract(url)
print(res.subdomain, res.domain, res.suffix) # www kingwen cn
print(res.registered_domain) # kingwen.cn
url1 = 'localhost:8080/hello'
res = tldextract.extract(url1)
print(res.subdomain, res.domain, res.suffix) # '' localhost ''

源码实现

主要分为三部分。

  • 首先是进行切割,将输入的url进行划分,利用# ? @ : 等特殊符号进行不断的划分,最后将主体的域名部分提取出来。
  • 其次将前一部分的主体域名通过’.'进行划分,形成对应的list。然后按照从位置i匹配到末尾元素的原则找到符合suffix字典(预先定义好的7336条)的第一个位置i.然后返回i。
  • 最后 list[i:]就是suffix. list[:i-1]就是subdomain. list[i]就是domain.从而问题得到解决。

尽管比较简单,但是比较实用,所以就记录一下。
在以后用到的时候可以省去很多烦恼。