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

執筆者:

関連記事

Rails4とD3.jsでローソク足グラフを描く〜Rails準備編

By: Manuel Calavera – CC BY 2.0 前回 Rails4で複雑な検索〜Ransack こちらのサンプルを使用させてもらいました。 datawarehouse.we …

Rails4でフォーム要素を動的に追加したり削除したり〜nested_form

目次1 参考2 前提の環境3 Gemfile4 View5 Controller6 できた7 パーシャル化8 フォームを追加する場所を指定する9 一対一の場合10 そのほか11 番外編: 1つのモデル …

WindowsのRubyでxlsxファイルにアクセスする~roo

By: Hajime NAKANO – CC BY 2.0 目次1 rooのインストール2 rooを使ってみる(基本)3 シートを指定する4 セルの値を確認する5 行列を数える rooのイ …

Rails4.1に対応したRefinery CMS 3.0を試してみた

By: Alexis Madrigal – CC BY 2.0 目次1 Refinery CMS2 Gemfile3 generate4 configファイル5 起動6 管理画面7 トラブ …

ElasticSearchをRubyから使う~elasticsearch-ruby

By: Harry Rose – CC BY 2.0 目次1 gem elasticsearch-ruby2 環境3 インスタンス作成4 メソッド一覧5 情報取得6 ドキュメントの作成7 …