4

与えられたウェブサイトのアドレス、例えば

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と、最初の「//」と「/」の間のものを返すようです。例えば

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

したがって、問題はR、URI からパブリック サフィックスを返すことができる関数を持つこと、またはパブリック サフィックス リストに次のアルゴリズムを実装することになります。

アルゴリズム
  • ドメインをすべてのルールと照合し、一致するルールをメモします。
  • 一致するルールがない場合、優先ルールは「*」です。
  • 複数のルールが一致する場合、優勢なルールは例外ルールです。
  • 一致する例外ルールがない場合、最も多くのラベルを持つルールが優先ルールになります。
  • 優勢なルールが例外ルールである場合は、一番左のラベルを削除して変更します。
  • パブリック サフィックスは、一般的なルールのラベル (ドットで結合) と直接一致するドメインからのラベルのセットです。
  • 登録済みまたは登録可能なドメインは、パブリック サフィックスと 1 つの追加ラベルです。
4

2 に答える 2

7

ここには 2 つのタスクがあります。1 つ目は、URL を解析してホスト名を取得することです。これは、httrパッケージのparse_url関数で実行できます。

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

2 つ目は、組織のドメイン (またはルート ドメイン、最上位のプライベート ドメインなど、呼び方は何でも構いません) を抽出することです。これは、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"
于 2014-10-10T03:44:32.630 に答える
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"
于 2014-10-10T02:39:32.807 に答える