Ale*_*lex 3 r domain-name public-suffix-list
给出网站地址,例如
http://www.example.com/page1/#
https://subdomain.example2.co.uk/asdf?retrieve=2
Run Code Online (Sandbox Code Playgroud)
如何返回根域R,例如
example.com
example2.co.uk
Run Code Online (Sandbox Code Playgroud)
为了我的目的,我将定义根域具有结构
example_name.public_suffix
Run Code Online (Sandbox Code Playgroud)
其中example_name排除"www",public_suffix在此列表中:
https://publicsuffix.org/list/effective_tld_names.dat
这仍然是最好的基于正则表达式的解决方案:
那么R根据公共后缀列表解析根域的内容如下:
http://simonecarletti.com/code/publicsuffix/
使用XML::parseURI似乎返回第一个"//"和"/"之间的东西.例如
> parseURI("http://www.blog.omegahat.org:8080/RCurl/index.html")$server
[1] "www.blog.omegahat.org"
Run Code Online (Sandbox Code Playgroud)
因此,问题减少为具有R可以从URI返回公共后缀的函数,或者在公共后缀列表上实现以下算法:
这里有两个任务.第一个是解析URL以获取主机名,这可以通过httr包的parse_url功能来完成:
host <- parse_url("https://subdomain.example2.co.uk/asdf?retrieve=2")$hostname
host
# [1] "subdomain.example2.co.uk"
Run Code Online (Sandbox Code Playgroud)
第二个是提取组织域(或根域,顶级私有域 - 无论你想要什么称呼它).这可以使用tldextract包(它受到同名Python包的启发并使用Mozilla的公共后缀列表)来完成:
domain.info <- tldextract(host)
domain.info
# host subdomain domain tld
# 1 subdomain.example2.co.uk subdomain example2 co.uk
Run Code Online (Sandbox Code Playgroud)
tldextract 返回一个数据框,为您提供的每个域都有一行,但您可以轻松地将相关部分粘贴在一起:
paste(domain.info$domain, domain.info$tld, sep=".")
# [1] "example2.co.uk"
Run Code Online (Sandbox Code Playgroud)