Rによる自動データ収集[taskscheduleR]
Rによる自動データ収集を買ったのでどうせならスクレイピング作業も自動化したいと思い, 勉強をし始めてからはや一週間. 材料がそろってきたのでまとめたいと思います.
参考にした文献に書いてあったことをそのまま試してみたという形になりますが, いかんせん日本語の記事が少なすぎる(元記事も2019年)なのでやってみた記事があってもいいのではないかと...
というわけで今回やりたいことをまとめて説明に入ります.
これ日本語の記事下の方に行かないとでてこないんですよね
今回やりたいこと
Rのスクリプトを走らせる時間・時期を指定する.
一通り説明したらうまくいかないときの対処法を説明します.
具体的にどのようにして行うのか
以下のように三段構えで動かしていきます.
①コンピュータに命令したい処理をRscriptで記述.
②コンピュータにRscriptを走らせるコードを記述.
③taskschedulerで②を起動する時間・時期を指定する.
簡単に言うとRscriptが命令書, Rscriptを起動するコードが命令書を渡す役, taskschedulerが渡す役の人を起こす役といった感じです.
①コンピュータに命令したい処理をRscriptで記述.
話だけ聞いてもよく分からないと思うので, 実際にやってみます. 試しに日経のサイトから決算発表のある会社の銘柄コードをスクレイピングするコードを記述します.
library(dplyr)
library(magrittr)
library(rvest)
library(stringr)
stock<-read_html("https://www.nikkei.com/markets/kigyo/money-schedule/kessan/")
number<-stock %>% html_nodes(xpath="//table[@class='cmn-table_style2']")%>%
html_nodes(xpath ="//td//a")%>%
html_text()
key<-str_subset(number,"\\d{4}")
date <- Sys.Date()
write.csv(key,paste0("決算情報",date, ".csv"),row.names = FALSE)
コードについては参考になるサイトをいくつか載せておきます.
注意しなくてはならない点はlibrary関数を最初に書かなくてはいけないところです. 普段は自動か手作業で人が多いと思うのですが, 命令書に忘れるとエラーを起こしてしまうので書いてください. (また人に渡したときにエラー起こしたら大変です)
②コンピュータにRscriptを走らせるコードを記述.
バッチファイルというコンピューターに命令書を渡す役のファイルを記述していきます. バッチファイルの中身はいたって簡単で,
cd 対象となるファイルが存在するディレクトリ
"C:\Program Files\R\R-4.0.2\bin\i386\rscript.exe" 対象となるファイル
というように書いていきます. なおR-4.0.2の部分はバージョンによって変わるので自分でrscript.exeを探してディレクトリを確認することを強く推奨します."C:\Program Files\R\R-4.0.2\bin\i386\rscript.exe" stock_number.R
#今回は対象ディレクトリ(Rscriptとバッチファイルがある場所)が 決算情報収集 という名前
#Rscriptの名前が stock_number.R
#バッチファイルの名前が triger.bat とします.
cd C:\Users\name\Documents\決算情報収集
"C:\Program Files\R\R-4.0.2\bin\i386\rscript.exe" stock_number.R
③taskschedulerで②を起動する時間・時期を指定する.
taskschdulerはwindowsに標準搭載されていると思われます.
これを利用してコンピュータに命令する時間や時期を決めます.
こんな感じの画面が出てくるのでここから基本タスクを作成というところを選び各種設定をしていきましょう. これで完成です.
上手くいかないとき
うまく動かないときは下記の試験を実行するとと良いです.
①Rscriptを手動で走らせてみる
→ここでエラーが出てたら実際のRscriptの処理でもエラーが出る
②バッチファイルを手動で起動してみる
→ここでうまくいかなかったらバッチファイルのミスかRscriptのパッケージの記述が抜けている可能性がある
→コマンドプロンプトにバッチファイルを突っ込むとエラー箇所が分かりやすい
まとめ
いかがでしたでしょうか? なかなか日本語の記事が見つからなくて困ったものの無事実行することが出来ました.
時間はかかりましたが収穫は大きかったように思います. 継続的にデータを収集したい方は参考にしてみてください. それではまた!
参考文献
str_subset関数が出てくる記事があったのでそれも載せます.
スクレイピングしたサイト
最初はYahooFinanceからスクレイピングしようと考えていたのですが,
YahooFinanceはスクレイピング禁止らしいので注意してください.