人生、徒然なるままに。

IT系の話題をメインに。DIYer。C#er。旅行/天文好き。

VB.netで経済指標巡回プログラムを作成しました。

VB.netGUI操作可能なクローラーを作成してみました。

ソースコードも開示します。

 

http://www.flickr.com/photos/68229468@N00/5798812875

photo by timaoutloud

 

さて、先日このような記事を書きました。

Rubyクローラーを作ったという記事です。

Rubyで経済指標自動巡回プログラム作成しました。 - 人生、徒然なるままに。

 

Rubyで作った理由は、面白そうだったから。

Rubyは初めて触るし、多くのことを覚えなくてはいけませんでしたが、

結果的にRubyをある程度体系的に学べたし、良かったと思っています。

 

元々、プログラム畑に足を踏み入れたのはVB.netからだったので、

今度はVB.netに移植して、ほぼ同じプログラムを作ってみました。

クローラーの幅が広がるのに損なことはありません。

 

 さて、rubyではクローリングのベースフレームワークにCapybara、Selenium,PhantomJS(with poltergeist)を使用しました。

javascriptが関係しようとしまいと、網羅できるためにPhantomJSをチョイス。

.netでも、同じようにできないかとseleniumのサイトを見ていたところ、rubyと同じようにwebdriverを使えばできるとのこと。

Selenium WebDriver — Selenium Documentation

 

上記サイトにはC#しか書いていなかったけど、DLLとして提供とあるので、同じMSILならVB.netでも不可能なことは無いはずなので実行を決意。

ヘッドレスドライバとしてphantomJSも動いたらなー、と考えていたら、これまた簡単に導入できるとのこと。

Michael Whelan

 

DBにはruby時と同じくSQLiteを使用しますが、内部的にはInsert前まではDataTableに保持するようにしたので、他のRDBMSなどを使用したければ簡単に組み合わせられるように作ってみました。

 

さて、実際にプロジェクトを作ってコードを書いていくわけですが、最近のVisualStudioではNuGetというパッケージマネージャで簡単にパッケージを取り込めるので、コードを数行打つだけで完了します。

今回は・・・

PM> Install-Package Selenium.WebDriver

PM> Install-Package phantomjs.exe

PM> Install-Package System.Data.SQLite

この三つだけでプロジェクトのベースが出来上がります。楽。

 

今回作ったソースも前回同様githubに公開してあります。

法に基づいた使用をお願いします。

取得したデータをWeb上に公開するならば、それは著作権法違反に問われると思いますのでお止めください。


shoutatani/GetMarketInfoByVB.net · GitHub

 

実際に作った画面はこちら。

f:id:shoutatani:20150102234526p:plain

いやはや、質素このうえない。

使いたいwebエンジンを選んで、(といってもfirefoxとPhantomJSの二つしか用意していない) 実行するだけ。

GUIプログラムだけど、経過途中なども知れるといいのでコンソールベースで作ってあります。

Visual Studio 2013かそれ以降でプロジェクト開いてビルドすれば.exeが出来上がります。(使用時に管理者権限で実行することをおススメ)

 

やはり、静的型付けな分Rubyより簡潔さ・スピードは劣ります。

しかしながら、VisualStudioという強力なIDE支援、windows系との親和の良さ、Xamarinとの連携によるAndroid/iOSへの移植可能性など、

.netはクローラーへの新たな道を指し示してくれるのではないでしょうか。

 

ところで同じ.netのC#よりもコードが煩雑でやりづらいVB.netをなぜ選んだんだ、と思われるかもしれませんが、VB.netでも意外と出来る子なんだぞ、ということを知ってもらいたかった一心で作りました。(C#の経験が薄いのは内緒)

 

年末から風邪をひいて、今も寝込んでる途中なんですが、

一年の計は元旦にあり、の諺の下、昨日今日で作ってなんとかリリースできました。

2015年も色々なことに挑戦して、毎日をエキサイティングに過ごしていきます!

 

ではでは。