I’ve been 我们 ing 约翰·库科夫斯基‘优秀的Python域提取库“葡聚糖”最近。 TLDextract可以很容易地从URL中提取域名,例如:
1 2 3 |
>>> 从 葡聚糖 进口 提取 >>> 提取('http://stjamespublichouse.com/?p=106') 提取结果(子域='', 域='ikigomu', 顶级域名='com') |
为什么这有用?
这有很多应用–例如,如果您要创建链接到您网站的热门域名的摘要,则可能会有很多引荐网址:
1 |
ref_urls = ["http://www.google.com/somesearch", "http://sub.othersite.com/something", "//www.google.com/images", "http://xyz.yahoo.com/sample"] #etc等 |
您可以编写一些简单的代码来输出域:
1 2 3 4 5 6 7 8 9 |
从 葡聚糖 进口 提取 定义 抢域(网址): ”“返回URL的域”” 尝试: 网址 = 提取(网址) 除 例外: 提高 例外(“此URL不起作用:{0}”.格式(网址)) 返回 '。'.加入((网址[1], 网址[2])) #连接域名和tld |
并使用 词频计算器 从我以前的帖子中汇编出最热门的引用域名列表!看到我’ve修改了第10行,改为将域添加为键:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
从 算子 进口 项目获取器 从 馆藏 进口 定义aultdict 定义 域_frequencies(l): ”“获取网址列表'l'并返回列表清单 其中每个项目是[域,频率],已排序 descending."” all_freqs = 定义aultdict(整型) #暂时保存值 对于 项目 在 l: all_freqs[抢域(项目)] + = 1 #将域添加到defaultdict #将字典转换为列表列表 all_freqs = [[k,v] 对于 k,v 在 all_freqs.重复项()] #返回排序后的版本 返回 已排序(all_freqs, 键=项目获取器(1), 逆转=真正) |
哪个返回:
1 2 |
>>> 域_frequencies(ref_urls) [[“ google.com”, 2], [“ yahoo.com”, 1], [“ othersite.com”, 1]] |
为什么可以’你在第三个斜杠处用句号分隔’s before?
这是我一开始尝试做的事情:
1 2 3 4 5 |
定义 抢域(网址): 返回 网址.分裂('/')[2].分裂('。')[-2:] >>> 抢域("http://www.google.com/something") >>> ['谷歌', 'com'] |
但是由于域名系统是顶级域名(例如.com),二级域名(例如.gov.uk),标准子域名(egiimgur.com)和拥有过多句号的人(例如www.dnr.state (.oh.us),这变得更加棘手,无法容纳所有内容。因此TLDextract实际上维护着Mozilla的本地副本’您系统上的ICANN域列表,可从以下网站下载:
http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1
并从中基本上找到URL末尾的匹配项。非常好!
所以呢’标题中提到的问题?
不幸的是,使用Mozilla的警告’的清单是您得到一些看似奇怪的行为。有许多网站和公司从亚马逊请求其子域为TLD,并包含在列表中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Amazon CloudFront : //aws.amazon.com/cloudfront/ //由Donavan Miller请求<[email protected]> 2013-03-22 云前.净 // Amazon Elastic Compute Cloud: //aws.amazon.com/ec2/ //由Osman Surkatty请求<[email protected]> 2013-04-02 计算.亚马逊.com 我们 -东-1.amazonaws.com 计算-1.amazonaws.com z-1.计算-1.amazonaws.com z-2.计算-1.amazonaws.com ap-东北-1.计算.amazonaws.com ap-东南-1.计算.amazonaws.com ap-东南-2.计算.amazonaws.com 欧盟-西方-1.计算.amazonaws.com SA-东-1.计算.amazonaws.com 我们 -政府-西方-1.计算.amazonaws.com 我们 -西方-1.计算.amazonaws.com 我们 -西方-2.计算.amazonaws.com // Amazon Elastic Beanstalk : //aws.amazon.com/elasticbeanstalk/ //由Adam Stein请求<[email protected]> 2013-04-02 弹豆.com |
要DynDNS的东西:
1 2 3 4 5 6 7 8 9 |
是-不-认证的.com 是-已保存.组织 是-圆滑的.com 是-优步.com 是-非常-坏.组织 是-非常-邪恶.组织 是-非常-好.组织 是-非常-不错.组织 是-非常-甜.组织 |
和更多… So you’如果您输入以下内容,将会绊倒:
1 2 |
>>> 提取("//scriptgang.elasticbeanstalk.com/getMagazine.html") 提取结果(子域='', 域='脚本帮', 顶级域名='elasticbeanstalk.com') |
而不是预期的“.com” as the 顶级域名.
这也一直使我感到困惑。我欢迎一种区分PSL的两个部分并指定自己的定义的方法。
//github.com/john-kurkowski/tldextract/issues/19
pingback: 提取TLD(顶级域)– and...