前編
チェックボックスを大量にクリックするはめになった私に @wakuteka よりMechanizeがあるよ☆彡
とのリプライをいただき、実装してみた試行錯誤してみたお話です。前編は導入編、
後編は簡単な実装編となっています。
チェックボックスを大量にクリックするはめになった私に @wakuteka よりMechanizeがあるよ☆彡
とのリプライをいただき、実装してみた試行錯誤してみたお話です。前編は導入編、
後編は簡単な実装編となっています。
チェックボックス、の前にRubyでWebサイトを解析する強力なライブラリ "Mechanize" の導入
基本的には以下のページで入れられます。なので、基本的には以下のページを参照してください。
ただ、私は自分の環境のせい(Window 32bit,Ruby 1.8.7,Cygwin) でいろいろひっかかったので、
似たような環境の方がいたら、参考になる情報も含んでいるかもしれません。
さて、導入編です。
最初導入なんかあっさり出来るんじゃん?って思っていました。
だって、インストール準備手順は(抜粋<引用>)
- Ruby 1.8.7 か 1.9.1 か 1.9.2 以降または Jruby を使う
- Mechanize が使用する nokogiri gem に必要な外部ライブラリ libxml2 と libxslt と iconv を yum や aptitude でインストールしておく
- 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 件のコメント:
コメントを投稿