从R中的url返回根域

时间:2014-10-10 02:29:07

标签: r domain-name public-suffix-list

给定网址,例如

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似乎返回第一个" //"之间的东西和" /"。 e.g。

> parseURI("http://www.blog.omegahat.org:8080/RCurl/index.html")$server
[1] "www.blog.omegahat.org"

因此,问题减少为具有可以从URI返回公共后缀的R函数,或者在公共后缀列表上实现以下算法:

算法
  • 根据所有规则匹配域名,并记下匹配的域名。
  • 如果没有规则匹配,则主流规则为" *"。
  • 如果多个规则匹配,则主要规则是例外规则。
  • 如果没有匹配的例外规则,则主流规则是标签最多的规则。
  • 如果主要规则是例外规则,请通过删除最左边的标签来修改它。
  • 公共后缀是域中的一组标签,它们与当前规则的标签直接匹配(以点连接)。
  • 已注册或可注册的是公共后缀加一个附加标签。

2 个答案:

答案 0 :(得分:6)

这里有两项任务。第一种是解析URL以获取主机名,这可以通过httr包的parse_url功能完成:

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"

答案 1 :(得分:1)

这样的事情应该有所帮助

> strsplit(gsub("http://|https://|www\\.", "", "http://www.example.com/page1/#"), "/")[[c(1, 1)]]
[1] "example.com"

> strsplit(gsub("http://|https://|www\\.", "", "https://subdomain.example2.co.uk/asdf?retrieve=2"), "/")[[c(1, 1)]]
[1] "subdomain.example2.co.uk"