機械学習で競馬予測をしてみよう!と思ったものの、データを集めるのが大変です。
そんな時、ありがたいことにscalaでのスクレイピングコードがあったので、これを使わせてもらいました。
まずは、ここからクローンしてきます。
netkeiba-scraper
しかし、ハマりどころがいくつもあるので、解決法を書き残していきます。
1. homebrewのインストール
MacOS用のパッケージマネージャです。今回はこれを使います。
2. Javaのインストール
sbtというscalaのビルドツールを使うのですが、java9だと動かないバグがあるみたいです。
こちらを参考にjava8を入れて使える状態にします。
バグについてはこちら
Unable to upgrade sbt on mac with brew
#3. scalaとsbtのインストール
スクレイピングのコードはscalaなので、homebrewからscalaとsbtを入れます。
Scalaとsbtのインストール方法
#4. build.sbtの修正
ライブラリのバージョンが新しくなっている関係で、依存ライブラリを修正する必要があります。テキストエディタでbuild.sbtを開き、以下をコピペしてください。
変更したのは、"org.scala-lang.modules" %% "scala-xml"と、libraryDependencies ++= Seqの中身です。
libraryDependencies += "org.xerial" % "sqlite-jdbc" % "3.7.2"
libraryDependencies += "joda-time" % "joda-time" % "2.3"
libraryDependencies += "org.joda" % "joda-convert" % "1.6"
libraryDependencies += "commons-io" % "commons-io" % "2.4"
libraryDependencies += "nu.validator.htmlparser" % "htmlparser" % "1.4"
libraryDependencies += "org.seleniumhq.selenium" % "selenium-java" % "2.41.0"
libraryDependencies += "commons-lang" % "commons-lang" % "2.6"
libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "1.0.6"
// Scala 2.10, 2.11, 2.12
libraryDependencies ++= Seq(
"org.scalikejdbc" %% "scalikejdbc" % "2.5.2",
"com.h2database" % "h2" % "1.4.196",
"ch.qos.logback" % "logback-classic" % "1.2.3"
)
※ 記事公開後にもライブラリが更新されるとエラーが出る場合があるので、以下のレポジトリの様子を見ながら適時書き換えてください。
https://github.com/scalikejdbc/scalikejdbc
https://mvnrepository.com/artifact/org.scala-lang.modules/scala-xml_2.11
#5.ログイン
もしnetkeiba会員ならいくつかの特別な指標が使えます。(ログインしなくても、特別な指標以外のデータは入ります)
src/main/scala/netkeiba-scraper/Main.scala
をエディタで開くと、以下のようになっているのでメールアドレスとパスワードを自分のものに修正します。
object RaceScraper {
val mail = "enter your email address"
val password = "enter your password"
def scrape() = {
val driver = new HtmlUnitDriver(false)
以下略)
#6. 実行
クローンしてきたディレクトリにcdしてからsbtを起動し、READMEに書いてあるコマンドを上から順に実行します。
ちなみに僕の場合では10年分のスクレイピングのコードが14時間ぐらいでした。