RSelenium でスクレイピングをしようとした時に日本語の記事がほとんどなく、TOEIC200点の英語力に頼るのがしんどかったので設定からデータ取得の流れを置いときます。
以下のページをスクレイピングしてみます。
https://jglobal.jst.go.jp/search/anythings#%7B%22category%22%3A%220%22%2C%22keyword%22%3A%22%E3%82%AB%E3%83%96%E3%83%88%E3%83%A0%E3%82%B7%22%7D
Dockerの準備
docker のインストールは省略
docker Selenium のイメージを取得します。
docker pull selenium/standalone-chrome
Selenium コンテナを立てます。
docker run -d -p 4444:4444 selenium/standalone-chrome
以上でdocker の設定は終了です。
Rの準備
RSelenium
を準備します。
install.packages("RSelenium")
library(RSelenium)
remDr = remoteDriver(remoteServerAddr = "localhost", port = 4444, browserName = "chrome")
remDr$open()
上記により、seleniumコンテナとRの接続が完了しました。
スクレイピングしてみよう
url <- 'https://jglobal.jst.go.jp/search/anythings#%7B%22category%22%3A%220%22%2C%22keyword%22%3A%22%E3%82%AB%E3%83%96%E3%83%88%E3%83%A0%E3%82%B7%22%7D'
remDr$navigate(url)
Sys.sleep(5)
planeHtmlList <- remDr$getPageSource()
write(unlist(planeHtmlList), "getPage.html")
この時、「ページの読み込み」と「ページの取得」の間隔が狭いとページをうまく取得できないので注意してください。
また、この時、ページの型はlist
であるので注意してください。
では、ここからタイトルをスクレイプしてみましょう。
#install.packages("rvest")
#install.packages("XML")
library(rvest)
library(XML)
html <- read_html("getPage.html")
parsed_doc <- htmlParse(html)
title <- xpathSApply(doc = parsed_doc , path = "//a[@href]", xmlValue)
できた。