三流プログラマの雑記

プログラム、ゲーム、株、その他雑記など書いてます。

mechanizeを用いた、スクレイピングの検証

スクレイピングするなら、「mechanize」を使用するといいよ!

って記事を見かけたので、試しに使ってみることにした。
でも、mechanize だけだとどうにも、スクレイピングしにくい、、、

nokogiri と組み合わせたらいいんじゃない?

ってことで、二つ組み合わせてのスクレイピングを行うことにした。
あとは勉強がてらにGemを作ってみた。
railsの開発とかはやったことあるけど、Gem作成の経験はなかったしね。

bundlerでGemのひな形が作れるなんて、、、知らなかった。
しかもコマンドは以下の一文、チョー簡単!

bundle gem hoge -t
  • t はオプションでテストケースを作成するっていうものらしい。

テストはrspecが採用されてた。
Gitをインストールしておかないとbundleがこけるので注意(実際こけて原因探すのに時間が掛かった、、、)

github.com

題材は楽天証券スクレイピング

取りあえずやりたいこと

  1. 認証のあるページのスクレイピング
  2. 「国内株の保有銘柄」の一覧取得
  3. 特定口座、NISA口座等で情報を別々に取得(普通口座で買うことないのでサンプルが無い!?)

ってな感じを実現してみることに

gemのそれぞれの役割としては、

「mechanize」

  • ログイン処理を行いログイン後のページ情報を取得

「nokogiri」


ってな感じかな?ログイン処理は以下で実装出来る。
ちまちま書かないといけないのかと思うと少し億劫。

    html = agent.get(@url)
    response = html.form_with(name: 'loginform') do |form|
      form.field_with(name: 'loginid').value = @user_id
      form.field_with(name: 'passwd').value = @user_pwd
      form.field_with(name: 'homeid').value = @homeid
    end.submit.content

あとはこのresponseをnokogiriに食わせると操作しやすくなって便利ー!
まあ、、、普通にURLにアクセスしてページ取ってきたのをnokogiriに食わせるのとなんら変わらない感じです。

また、Gemの動作確認も簡単で、「hoge」でGemを作成した場合

hoge/bin/」に移動後「ruby console」を実行するとirbがGemをrequireした状態で起動する。
あとはirb上で動作確認すればOK。
便利だねー、、、

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例