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

執筆者:

関連記事

Rails3で帳票印刷を試す~thinreports

  www.thinreports.org/ github.com/thinreports/thinreports-rails3-example 目次1 とりあえずサンプルを試してみた2 ソ …

Railsのテーブル並び替えを実装する

    環境 RailsにTwitter Bootstrapを設定する~twitter-bootstrap-rails 参考 #147 Sortable Lists (revise …

backbone-railsのscaffoldで生成されるコードでルーティングとCRUDの処理をどうやってるのか読んでみた

By: asobi tsuchiya   目次1 はじめに2 サンプルの準備3 初期化4 ルーター5 READ6 CREATE7 UPDATE8 DELETE はじめに backbone-r …

Rails3.2でFacebook風インターフェイスでタグづけ〜acts-as-taggable-on+jquery.tokenInput

By: Mauquoy Token Company – CC BY 2.0 railscasts.com/episodes/258-token-fields?language=ja&#03

RedcarpetでTOC表示

By: epSos .de – CC BY 2.0 目次1 Redcarpet2 Redcarpetの使い方3 TOCを表示する4 できた5 Bootstrapのaffixとscrolls …