LoginSignup
21
20

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-12

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

そんな時、ありがたいことに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時間ぐらいでした。

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20