Scala×Dispatchでスクレイピング【編集途中】

近頃忙しくなってしまい、更新する余裕が無いので、現状で一旦アップします。
(誰か、残り埋めてくれ。。。なんならソースコードまるっと送るので。)

近年はAPIが充実してきていますが、それでもAPIが用意されていないサイトのデータが欲しい!
という時がありますよね。

今回は、Scalaとその非同期Http通信ライブラリである、
Dispatchを使ってスクレイピングを行っていこうと思います。

Dispatchとは

Scalaの非同期通信ライブラリであり、Scalaの並列処理の仕組みであるFutureが使われています。

スクレイピング目的であまりに頻繁にサイトにアクセスする事は好ましいことでは無いですが、
ある程度の通信を並列して行いたい時には非常に便利なライブラリです。

Dispatchは一度大きな仕様変更を行っており、過去のバージョンはDispatch classicと呼ばれております。
現行バージョンは、Dispatch 又は Dispatch reboot と呼ばれています。
古いドキュメントだと、Dispatch classicの説明であることが多いので注意してください。

詳細は以下のリンクを。ライブラリの導入方法などは割愛致します。
Dispatch — Dispatch

チートシート
(Dispatch classicのものですが、多くのメソッドの呼び出し方は共通です)
Periodic Table of Dispatch Operators

Dispatchの使い方

Dispatchによる処理は大きく三つのステップに分かれます。

  1. HTTPリクエストの作成
  2. HTTPリクエストの送信
  3. HTTPレスポンスの処理

HTTPリクエストとかレスポンスとか良くわからん。。。
という人は以下の書籍の購入をオススメします。

0.import

import dispatch._
import scala.concurrent.ExecutionContext.Implicits.global

1.HTTPリクエストの作成

ドメインの指定
val domain = :/("xxx.com")  

//httpsの場合
val sdomain = domain.secure
ディレクトリの指定
val url = domain / "sp" / "index"  
パラメータの指定
val param = List( ("param1","1"), ("param2","a") )

//Getの場合(URLにパラメータを追加)) )
val url_with_param = url <<? param

//Postの場合(Bodyに追加)
val url_with_bodyparam = url << param

//ファイルの場合は、<<<で追加 
ヘッダー情報の追加
//Auth認証
val url_with_auth = url as_! ( "id", "pass" )

//その他ヘッダー情報
val hparam = List( ("hparam1","1"), ("hparam2","a") )
val url_with_header = url <:< ( hparam )

1.HTTPリクエストの実行