在看scrapy-cluster源码的时候发现了一个非常实用的包-tldextract,
可以非常方便的抽取出一个url的域名作为redis的key的一部分,感觉很神奇。所以记录一下。
对于 www.kingwen.cn 这个网址,tldextract 可以提取出三部分:www、kingwen、cn,分别对应子域 subdomain、主体标签 domain、公共后缀 suffix。这里 cn 是顶级域,kingwen.cn 是其下一级域名,www.kingwen.cn 再下一级。有了这个包,我们就不用自己拆分啦。
安装tldextract包
1 | pip3 install tldextract |
使用tldextract包
1 | import tldextract |
源码实现
主要分为三部分。
- 首先是进行切割,将输入的url进行划分,利用# ? @ : 等特殊符号进行不断的划分,最后将主体的域名部分提取出来。
- 其次将前一步得到的域名按’.'切分成list。从位置i到末尾逐段匹配公共后缀列表PSL,找到匹配的位置i。当时查看的列表有7336条记录,这个数量会随列表更新而变化。
- 找到公共后缀且 i > 0 时,list[i:]就是suffix,list[:i-1]就是subdomain,list[i-1]就是domain。如果没有找到公共后缀,或后缀前没有主体标签,还需要单独处理。
尽管比较简单,但是比较实用,所以就记录一下。
在以后用到的时候可以省去很多烦恼。