给定的网站地址,例如
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/
编辑:根据Richard的评论添加额外信息
使用CCD_ 3似乎返回第一个"//"以及"/&";。例如
> parseURI("http://www.blog.omegahat.org:8080/RCurl/index.html")$server
[1] "www.blog.omegahat.org"
因此,问题归结为具有R
函数,该函数可以从URI返回公共后缀,或者在公共后缀列表上实现以下算法:
- 根据所有规则匹配域,并注意匹配的规则
- 如果没有规则匹配,则盛行规则为"匹配"*&"
- 如果有多个规则匹配,则占主导地位的规则是属于例外规则的规则
- 如果没有匹配的异常规则,则占主导地位的规则是具有最多标签的规则
- 如果主要规则是一个异常规则,请通过删除最左边的标签对其进行修改
- 公共后缀是来自域的一组标签,这些标签与现行规则的标签直接匹配(由点连接)
- 已注册或可注册的域是公共后缀加上一个附加标签
这里有两项任务。首先是解析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"
Somthing-lik这应该有助于
> 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"