从 R 中的 url 返回根域

2024-01-07

给定网站地址,例如

http://www.example.com/page1/#
https://subdomain.example2.co.uk/asdf?retrieve=2

如何返回根域R, e.g.

example.com
example2.co.uk

出于我的目的,我将定义根域以具有结构

example_name.public_suffix

其中 example_name 不包括“www”,并且 public_suffix 位于此处的列表中:

https://publicsuffix.org/list/ effective_tld_names.dat https://publicsuffix.org/list/effective_tld_names.dat

这仍然是最好的基于正则表达式的解决方案吗:

https://stackoverflow.com/a/8498629/2109289 https://stackoverflow.com/a/8498629/2109289

里面的东西怎么样R根据公共后缀列表解析根域,例如:

http://simonecarletti.com/code/publicsuffix/ http://simonecarletti.com/code/publicsuffix/

编辑:根据理查德的评论添加额外信息

Using XML::parseURI似乎返回第一个“//”和“/”之间的内容。例如

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

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

Algorithm
  • 将域与所有规则进行匹配并记下匹配的规则。
  • 如果没有匹配的规则,则优先规则为“*”。
  • 如果有多个规则匹配,则优先规则是例外规则。
  • 如果没有匹配的例外规则,则优先规则是标签最多的规则。
  • 如果现行规则是例外规则,请通过删除最左边的标签来修改它。
  • 公共后缀是来自域的一组标签,它们直接与现行规则的标签匹配(用点连接)。
  • 已注册或可注册domain是公共后缀加上一个附加标签。

这里有两个任务。第一个是解析 URL 以获取主机名,这可以通过httr http://cran.r-project.org/web/packages/httr/index.html包的parse_url功能:

host <- parse_url("https://subdomain.example2.co.uk/asdf?retrieve=2")$hostname
host
# [1] "subdomain.example2.co.uk"

第二个是提取组织域(或根域、顶级私有域——无论你怎么称呼它)。这可以使用以下方法完成提取物 https://github.com/jayjacobs/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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 R 中的 url 返回根域 的相关文章

随机推荐