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
-,

執筆者:

関連記事

Ruby+guardでSass+Compass+CoffeeScriptの自動コンパイル環境を整える

    Ubuntu12.04.1でCoffeeScriptの自動makeとブラウザの自動リロード~guard-coffeescript すでにCoffeeScriptを自動Mak …

no image

Rubyでffmpegのラッパーを使う~streamio-ffmpeg

  github.com/streamio/streamio-ffmpeg rubyでffmpegが扱える高機能ラッパー 導入 [crayon-5bf1cb20a173b770867969/ …

WindowsのRubyでxlsxファイルを生成する~axlsx

By: Roman Boed – CC BY 2.0 目次1 axlsxのインストール2 hello axlsx3 サンプル4 参考 axlsxのインストール コマンドラインからインストー …

no image

位置情報通知の使いみちアイデアメモ

    ここまでHTML5とGoogle Mapsを使った位置情報通知を試してきたけど、その使いみちについてメモしておきたい 目次1 カレログ的なサービス2 宝探し的なイベント3 …

Rails3.2でHTML5で取得した位置情報をMongoDBに保存してGoogleMapsでみる~mongoid、gmaps4rails

前提 Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder 目次1 Mongoid2 スケルトンを作る3 Gmap4railsのインストール4 とりあえず地図を表示 …