LoginSignup
0
0

More than 1 year has passed since last update.

正規表現が苦手な人がURLからドメイン名を取得する。

Last updated at Posted at 2021-06-14

TwitterのAPIを使って分析をしている過程で、どうしてもURLのドメイン名を取得したいという状況に直面したものの、正規表現が苦手。そこで、今回はRのstringrパッケージを使用して、正規表現が苦手な人でもごり押しでURLからドメイン名を取得する方法を備忘録も兼ねて書きます。(そんな人いるか知りませんが。)

適当なデータフレームを用意する

とりあえず適当にブラウザのタブに並んでいるURLをペタペタ貼って、data.frameオブジェクトを作りました。

df <- data.frame(id = 1:4,
                 url = c("https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet",
                          "https://qiita.com/yuhi62320/items/d1193a03392458e99416",
                          "https://www.instagram.com/kannahashimoto.mg/?hl=ja",
                          "https://www.youtube.com/watch?v=swZVrg3H-8E"
                          )
)

View(df$url)

このURLのリンクから、ドメイン名を取得したいのですが、正規表現が苦手すぎるので楽して実行できるものはないものか。。。
よく見ると、URLは、/(スラッシュ)で分割することによってある程度ブロックを分けられそうです。
しかも幸いなことに、ドメイン名はhttp(s)の直後に来るので、割とシンプルに獲得できそう。
というわけで、今回は、正規表現が苦手すぎる私が、stringrパッケージを使ってゴリ押しでドメイン名を獲得していきます。

stringrを使ってゴリ押しでドメイン名を獲得する。

今回はtidyverseで。stringrも同時にロードされます。

library(tidyverse)

df_url_split <- str_split_fixed(df$url, "/", n=4) %>% 
          data.frame()

View(df_url_split)

str_split_fixed(stirng, pattern, column_number)は、指定したパターンを基に文字列を分割し、ベクトルとして保存してくれます。
今回は、df$urlpattern = "/"で分割し、その結果を要素数4のベクトルに分割し、それをdata.frameとしてまとめています。n = 4としているのは、これより少ないとドメイン名以前にある"/"の数が足りず、ドメイン名を独立して分割させられないから。
こちらもよく見れば、各ドメインがX3の列にまとまっていることがわかります。ドメイン名の前に/が3個あるので、3番目の列に格納されているんですね。
あとは、いらない部分を取り除いて成形するだけ。

df <- df %>%
  cbind(df_url_split) %>% 
  mutate(domain_name = X3) %>%
  select(-c(X1,X2,X3,X4))
View(df)

無事にドメイン名を取得できました。
正規表現が得意な方はよりスマートな方法を教えてください。ぜひ。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0