2011年11月29日火曜日

チェックボックスにプログラム(Ruby)で指定のものにチェックしてそのデータを取り出す方法ー前編


前編
チェックボックスを大量にクリックするはめになった私に @wakuteka よりMechanizeがあるよ☆彡
とのリプライをいただき、実装してみた試行錯誤してみたお話です。前編は導入編、
後編は簡単な実装編となっています。

チェックボックス、の前にRubyでWebサイトを解析する強力なライブラリ "Mechanize" の導入

基本的には以下のページで入れられます。なので、基本的には以下のページを参照してください。
ただ、私は自分の環境のせい(Window 32bit,Ruby 1.8.7,Cygwin) でいろいろひっかかったので、
似たような環境の方がいたら、参考になる情報も含んでいるかもしれません。
さて、導入編です。

最初導入なんかあっさり出来るんじゃん?って思っていました。

だって、インストール準備手順は(抜粋<引用>)
  1. Ruby 1.8.7 か 1.9.1 か 1.9.2 以降または Jruby を使う
  2. Mechanize が使用する nokogiri gem に必要な外部ライブラリ libxml2 と libxslt と iconv を yum や aptitude でインストールしておく
  3. Mechanize を gem install mechanize でインストール
Windows の場合は Nokogiri のバイナリパッケージとして関連外部ライブラリが一括インストールされるので、特になにもしなくて構いません。<引用終わり>



って書いてあるんだもの。

どこまでライブラリ入れてたか忘れたし、エラー見たほうがきっとはやいぞ、ってわけで

上記のページのサンプルプログラムを実行してみた。
require 'rubygems'
require 'mechanize'
require 'kconv'

agent = Mechanize.new
agent.get('http://www.google.co.jp/')
agent.page.form_with(:name => 'f'){|form|
  form.field_with(:name => 'q').value = 'Ruby'
  form.click_button
}
agent.page.link_with(:text => "オブジェクト指向スクリプト言語 Ruby".toutf8).click
puts agent.page.uri
puts agent.page.at('div#logo/img')['alt']
エラーがやっぱり出て、
 no such file to load -- rubygems (LoadError)
そうか、なかったですか。というわけで取り急ぎ入れる。

で、再度実行すると

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- mechanize (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from getget.rb:1

と言われちゃった。あ、そっかmechanize入れないとというわけで 実行してみたら・・・・
$ gem install mechanize
Building native extensions.  This could take a while...
     14 [main] ruby 9752 C:\cygwin\bin\ruby.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\ruby\1.8\i386-cygwin\etc.so to same address as parent: 0x90000 != 0x200000
Stack trace:
Frame     Function  Args
023FAEF8  6102796B  (023FAEF8, 00000000, 00000000, 00000000)
023FB1E8  6102796B  (6117EC60, 00008000, 00000000, 61180977)
023FC218  61004F1B  (611A7FAC, 61243584, 00090000, 00200000)
End of stack trace
・・・・

といったエラーが出る。

調べてみたら

rebase問題

Cygwin で Ruby のプログラムを動かしていると,
...
D:\cygwin\bin\ruby.exe: *** unable to remap D:\cygwin\bin\cygssl.dll to same address as parent(0xDF0000) != 0xE00000
...

みたいなメッセージが延々と出力されてどうしようもなくなることがあります.

$ rebaseall
というコマンドを実行してやると回避できます.
これはRubyだけで起こる問題ではなく,Cygwin fork() の問題だそうです

へー、というわけでrebaseallで回避。cygwinのバカっ><。

でまたgem install mechanizeをするとエラーが(・。・;

ERROR:  Error installing mechanize:
        ERROR: Failed to build gem native extension.

        /usr/bin/ruby.exe extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with           installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.



libxsltについても同様にエラーが出たのでcygwinからまたインストールする。

テストプログラムを再度実行
結果:

http://www.ruby-lang.org/ja/
Ruby - A Programmer's Best Friend
でけた・・・(く)



0 件のコメント:

コメントを投稿