从R中的url返回根域



给定的网站地址,例如

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"

最新更新