FSharpでWebスクレイピング

最近、関数型プログラミング言語のF#を使っていますが、せっかくなのでWebスクレイピングをしてみました。F#Dataは、HTML CSS Selectorsも実装中なので、これが使えれば簡単にデータが取得できそうです。今回は、HTMLParserを使ってみました。

今回の目標は、艦隊コレクションのデータをテーブルとして作成して、複数のカラムでソートできるようなWebアプリを作ってみようと思います。本当はバックエンドをF#にしたいのですが、予算などの関係でPHPかJavaScriptのみです。データはひとまずkancolle.wikia.comからF#でデータを取得してみます。

とりあえずできたソースコード

Visual Studio 2015のNuGetでFSharp.Dataをインストールして、参照設定を右クリックして[Generate References for F# Interactive]をクリックすると、Scripts/load-project-debug.fsxファイルが作成され、これを#loadディレクティブでロードすれば、プロジェクトの参照設定をすべて読み込むことができます。

 

今回、コンソールでWebスクレイピングによりHTMLを取得して、CSVに加工するツールを作成してみました。実装はすこし関数型を意識するため、副作用のあるコードは MySideEffectsモジュールに詰め込むようにしました。

大半のアプリは、副作用だらけ

副作用のあるコードは MySideEffectsモジュールに詰め込むように意識して、はじめて分かったのですが、私たちが普段使ったり開発するソフトウェアは思った以上に副作用が多いです。ゲームや携帯アプリ、Webアプリなどはユーザー操作やデータ入出力が大半なので、副作用のかたまりです。

今回のプログラムを書き、F#Dataのソースコードを少しみたりしていて感じたのですが、F#は.NETのAPIがC#と同様使えるので、関数型プログラミング言語としてはHaskellなどにくらべてかなり緩いのかもしれません。プログやメディアの記事では、関数型言語といえば、参照透過性!副作用!モナド!とよく言われますが、.NETAPIとパイプライン演算子使いやすいし、F# InteractiveにAlt+Enterで流し込める手軽さがあるので、もう少し気楽に関数型言語を使ってもいいのかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA