给定网站地址,例如 http://www.example.com/page1/#https://subdomain.example2.co.uk/asdf?retrieve=2 如何在R中返回根域,例如 example.comexample2.co.uk 为了我的目的,我将定义根域具有结构 example_name.public_suffix
http://www.example.com/page1/# https://subdomain.example2.co.uk/asdf?retrieve=2
如何在R中返回根域,例如
example.com example2.co.uk
为了我的目的,我将定义根域具有结构
example_name.public_suffix
其中example_name排除“www”,public_suffix在此列表中:
https://publicsuffix.org/list/effective_tld_names.dat
这仍然是最好的基于正则表达式的解决方案:
https://stackoverflow.com/a/8498629/2109289
R中根据公共后缀列表解析根域的内容如下:
http://simonecarletti.com/code/publicsuffix/
编辑:根据理查德的评论添加额外信息
使用XML :: parseURI似乎返回第一个“//”和“/”之间的东西.例如
> parseURI("http://www.blog.omegahat.org:8080/RCurl/index.html")$server [1] "www.blog.omegahat.org"
因此,问题减少为具有可以从URI返回公共后缀的R函数,或者在公共后缀列表上实现以下算法:
算法
>将域与所有规则匹配,并记下匹配的规则.
>如果没有规则匹配,则主流规则为“*”.
>如果多个规则匹配,则主流规则是例外规则.
>如果没有匹配的例外规则,则主流规则是标签最多的规则.
>如果主要规则是例外规则,请通过删除最左边的标签来修改它.
>公共后缀是域中的标签集,它直接匹配当前规则的标签(由点连接).
>已注册或可注册的域名是公共后缀加上一个附加标签.
host <- parse_url("https://subdomain.example2.co.uk/asdf?retrieve=2")$hostname host # [1] "subdomain.example2.co.uk"
第二个是提取组织域(或根域,顶级私有域 – 无论你想要什么称呼它).这可以使用tldextract包(其灵感来自同名的Python包并使用Mozilla的公共后缀列表)来完成:
domain.info <- tldextract(host) domain.info # host subdomain domain tld # 1 subdomain.example2.co.uk subdomain example2 co.uk
tldextract返回一个数据框,为您提供的每个域都有一行,但您可以轻松地将相关部分粘贴在一起:
paste(domain.info$domain, domain.info$tld, sep=".") # [1] "example2.co.uk"