2016年4月23日土曜日

Elixir で Web スクレイピング

Webスクレイピングの本

Webスクレイピングの本といえば、「Rubyによるクローラー開発技法」が有名です。

今回は、先日発売された「PythonによるWebスクレイピング」を読みました。 Python本らしく、誰でも最短でやりたいことができるようになっています。

内容は、Webの情報を取得、蓄積、活用(組み合わせ)するというステップにそって、HTTPクライアントライブラリを使ったシンプルなプログラムから始めて、機能を追加しながらWebスクレイパーを作成します。

また、処理のコアとなる部分のコードは、エラー処理含めて載っていますし、実用的なコードを作る際に注意すべき点をアドバイスしていて、実践的な内容になっています。

説明は、必要にして十分といった感じです。分量的にも、200ページ程度で読みやすいので、Webを漁って断片的な情報を集めるより効率はよいと思います。

プログラミング初心者はもちろん、さっくりとこの分野を押さえたいエンジニアの方にもオススメできます。

Elixirで実装してみる

今回読んだ本を元に、ElixirでWebスクレイパーを実装してみたいと思います。

Elixirでスクレイパーを作る記事はすでにありますが、上記のWeb情報を活用するための手段としての、Webスクレイピングと捉えて、簡単なWebシステムを構築することを目指します。

Pythonの豊富なライブラリに対してどこまでElixirが実用的になっているかを検証するためにもよい題材と思います。

Webスクレイピングの基本要素

実装に入る前に、Webスクレイピングに必要な要素を見てみます。

HTTPクライアントや、HTMLパーサのほか、Web API関連とデータ保管もあげました。上記の本では、データ保管は、スクレイピングした情報を活用するためには不可欠とされていました。

実際に実用的なものを作ろうと考えると、これらがシームレスに連携しないと厳しいので、ここでもあげることにしました。

  • HTTPクライアント
  • HTMLパーサ(内部リンクと外部リンクの取得)
  • API(認証、クライアントライブラリ、JSON)
  • データ保管(DB、ファイル)

Elixirのライブラリ

上のそれぞれの要素を実現するライブラリです。有名なところだけでも2~3はライブラリがあるようです。
一通りは揃っているので、とりあえず基本的なシステムを構築するには問題ないと考えます。

Elixirプロジェクトのセットアップ

まずはmixを使って、プロジェクトを作ります。

$ mix new prj

次に、mix.exsに設定を追加します。
この際、applicationに、:httpoisonを追加しておくと自動でstartしてくれます。

def application do
  [applications: [:logger, :httpoison]]
end

defp deps do
  [{:httpoison, "~> 0.8.0"}]
end

依存ライブラリをインストールします

$ mix deps.get

実際のソースコードは、libs以下に作成します。
main関数を作っておきます。

defmodule Prj do
  def main([]) do
  # codes
  end
end

実行します

$ mix run -e "Prj.main([])"

コンパイルが開始し、Prj.main関数が実行されます。

プロジェクト周りは、このページがステップバイステップで解説していてわかりやすいのでオススメです。

http://etc9.hatenablog.com/entry/2015/08/04/004748

では、次回から具体的な実装に入っていきたいと思います。

Written with StackEdit.

0 件のコメント:

コメントを投稿