Railsで使えるGem

Rubyでウェブサイトを操作してリストをつくる〜mechanize

投稿日:2012年9月12日 更新日:

 

 

 

以前からRailscastsというRuby on Railsの動画サイトが好きでよく見ているのだが、380近く動画があって気になったものから見ているので、どれをみたのかわからなくなってきた

そこで、mechanizeというruby gemをつかって動画のリストを取得してチェックリストを作ることにした

mechanizeは、指定したウェブサイトの要素を分析して、フォームに必要な事項を入力して、クリックだとか、その結果のうち、div#resultに書かれている要素を抜き出すだとかいうことをしてくれる

参考

railscasts.com/episodes/191-mechanize

mechanize.rubyforge.org/GUIDE_rdoc.html

インストール

準備

おそらくcapybaraをインストールしていればすでに導入済みだと思うが、必要なライブラリを用意する

gem

コンソールで試す

pryのインストール

*irbはコンソールでrubyを実行する環境だけど、pryの方が高性能なのでpryが使えたら使ったほうがいい

 最初の一歩

やっていることは

[1] mechanizeライブラリを使うことを宣言

[2] 空のMechanizeオブジェクトを準備

[3]ウェブサイトを指定して内容を取得する

内容はagent.page.rootにはいる

pryであれば色付きで内容が表示される

いろいろ試す

試しに、title要素を取得してみる

そこから、textを取り出せばウェブサイトのtitle要素のテキストを取得できる

 

対象のウェブサイトの調査

あとは、その要領で必要な要素のテキストを取得すればいい

 

要素はFirefoxの「要素を調査」などで調べられる

おすすめはhttp://www.selectorgadget.com/のブックマークレットを使うことだ

 

ちなみに、Railscastsのサイトでは一つのエピソードごとにだいたい次のような要素が設定されていた

  •   div.number ナンバー
  •   div.published_at 投稿日
  •   a コメント
  •   h2 タイトル
  •   div.description 説明
  •   span.stats 時間(分)
  •   .watch ビデオへのリンク

そして、次のページへのリンクは「.next_page」が設定されていて、最終ページではこれが「.next_page.disabled」になることがわかった

試しにさっきのページのエピソードの最初の要素を取ると

ここから例えば動画のタイトルをとるには

h2要素を選んでテキストを取ればOK

リンクをクリックするにはクラスを探してクリックすればよい

そうするとagent.pageの内容がクリックしたページのものに書き換わっているのがわかる

今のURIを調べるには

最初に 43ページ目を指定したのが、previous_pageをクリックしたので42ページ目になっているのがわかる

あとは、これをまとめてテスト用のスクリプトに書き出せばOK

ループとかがよくわからないからカッコ悪いけど動いたのでよしとする

最初の一回を読んでからクリックを始めると、最後のページで余分にクリックしてエラーが出るか、最後のページを読み込まないんだよな・・・

*多用するとウェブサイトに迷惑がかかるので注意!!

これを実行すれば一覧表が得られる

あとは煮るなり焼くなり

 

実はこれすんなり動いたわけではなくて、色々と調べないとエラーがすぐ出てしまう

コンソールで試しながらやるのがいいと思う

また日本語はエンコードという難問があって自分のこのブログはまだ表示できずにいる

RubyのMechanizeで文字化けするページがある件について

 

公式サンプルを改良したもの

 

 

-Railsで使えるGem
-,

執筆者:

関連記事

SimpleCovのカバレッジをvimに表示させる~simplecov-vim

      github.com/nyarly/Simplecov-Vim 参照 Rails3でテストカバレッジを計測する~simplecov,thin 自分のgem上の …

Rails4で複雑な検索〜Ransack

By: eric molina – CC BY 2.0 株価データをつかって複雑な絞り込み検索ができるようにしてみた データは、こちらのサンプルを使わせていただいた datawarehou …

SASS/SCSS+COMPASS+zurui-sass-railsで角丸・グラデ・半透明・テキストシャドウ・ボックスシャドウ

By: Ole Houen – CC BY 2.0 sass-lang.com/ Sassの基礎 (全15回) ドットインストール ネストを覚えた人のためのSassの便利な使い方 comp …

no image

kaminari + Twitter Bootstrap2テーマでFirst,Prev,Next,Lastだけおかしい場合

前につくったTwitter Bootstrap2用のkaminariテーマをコピーして使おうとしたら表題の通り、First,Prev,Next,Lastがおかしい あと…も表示されない G …

Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder

    HTML5ではブラウザからユーザーのPCの位置情報を取得することができるGeoLocation APIというものがある (もちろんデフォルトではユーザーに確認をする設定にな …