機械学習

Macでnetkeiba-scraperを使って、競馬データベースをスクレイピングする

機械学習で競馬予測をしてみよう!と思ったものの、データを集めるのが大変です。

そんな時、ありがたいことにscalaでのスクレイピングコードがあったので、これを使わせてもらいました。

まずは、ここからクローンしてきます。
netkeiba-scraper

しかし、ハマりどころがいくつもあるので、解決法を書き残していきます。

1. homebrewのインストール

MacOS用のパッケージマネージャです。今回はこれを使います。

MacにHomebrewをインストールする

2. Javaのインストール

sbtというscalaのビルドツールを使うのですが、java9だと動かないバグがあるみたいです。
こちらを参考にjava8を入れて使える状態にします。

MacのBrewでJava8 + Java9を利用する

バグについてはこちら
Unable to upgrade sbt on mac with brew
スクリーンショット 2017-11-12 20.39.20.png

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
をエディタで開くと、以下のようになっているのでメールアドレスとパスワードを自分のものに修正します。

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時間ぐらいでした。