なんかウェブページのテストを自動化したりスクレイピングしたりするのにseleniumというのが結構有名らしく、そいつをRから使おうというreleniumという奴があったので使ってみました。
取り敢えずインストール。(注:windowsではrtoolsが必要です。)
install.packages(“rJava”) #rJavaが必要なので最初にインストール install.packages(“devtools”) #devtoolsがreleniumのインストールに必要 require(devtools) #devtoolsを読み出す。 install_github(‘seleniumJars’, ‘LluisRamon’) #selenium本体 install_github(‘relenium’, ‘LluisRamon’) #releniumをインストール早速試したいのでdemoコードを入れてみる
require(relenium) #releniumの準備 demo(webExample) #あらかじめ用意されてるでもコードそしたらエラー・・・
> require(relenium)
要求されたパッケージ relenium をロード中です > demo(webExample) demo(webExample)
—- ~~~~~~~~~~ Type <Return> to start : > #require(relenium)
> require(XML) Loading required package: XML > firefox <- firefoxClass$new()
以下にエラー exceptionTable[, 1] : 添え字が許される範囲外です
そして気がつく。
「あ、おれfirefox入れてないやw」
と言う事でfirefoxをインストール。
ブラウザごときで56.1MBもあるのか・・・
インストールが終わってRのセッションを立ち上げ直して上のコードを入れると、
なんかReleniumのサイトに勝手に飛んで色々ごちゃごちゃとやってくれます。
おーやったー動いたー。
と言う事で自分でちょっと書いてみます。
#read packages require(relenium)
library(XML) firefox <- firefoxClass$new() #fire fox 起動 firefox$get(“http://www.housecat442.com/”) #指定したURLへとジャンプ doc <- htmlParse(firefox$getPageSource()) #getPageSource()でソースを取得して、htmlPareseでパース。 name <- xpathApply(doc,”//h2[@class=’entry-title’]/a”,xmlValue) #記事のタイトルのh2タグ下にあるaタグの中身を取得 link <- xpathApply(doc,”//h2[@class=’entry-title’]/a/@href”) #同じくリンクを取得 data.frame(cbind(name,link)) buttonElement <- firefox$findElementByXPath(‘//*[@id=”nav-below”]/div[1]/a’) #xpathを使って検索結果で次ページへいくボタンを指定 buttonElement$click() #上で指定したボタンをクリック
こうすると勝手にfirefoxが立ち上がってこのブログの最初のページの記事のタイトルとリンクを取って来て、次のページへと進んでくれます。
基本的にはfindElementByXPath()を使って要素を指定して、$sendKeysとかでテキストインプットしたりエンターキーたたいたり、$clickとかで要素クリックしてブラウザでアクションしたりとそんな感じです。
因にreleniumではクロームの要素を検証で取得したxpathがそのまま使えるので非常に楽です。
XMLパッケージだとちょっと修正しないと読んでくれません。(俺がしょぼいだけ?)
スクレイピングしたければ$getPageSource()でソース取得してXMLパッケージとかで調理すれば良いかと思います。
forとか使えば繰り返しの動作とかも行えるので良いですね。
casperjsとかより簡単で良い感じがします。
useragentとか変えられたら良いなーと思うのですけど、なんか方法あるのかな?