Mechanizeマニュアル

6480 ワード

使用開始[WW:Mechanize](http://mechanize.rubyforge.org/mechanize/classes/WWW/Mechanize.html)———————————本教程の目的は、あなたがMechanizeを使い始めるのを助けることです。この教程を読んだら、ページをキャプチャして、リンクをクリックして、formを記入して提出してください。データを抽出して、他の役に立つかもしれません。このチュートリアルは、非常に浅い機能に触れていますが、スタートをサポートするのに十分です。私たちは一つのページをつかみましょう。―――あなたが最初にやるべきことは、コードにmechanizeを引用して、新しいmechanizeの例を初期化することです。
require 'rubygems'
require 'mechanize' 
 agent = WWW::Mechanize.new
作成したばかりのメッセージを使ってページをキャプチャします。Googleで切開しましょう。
page = agent.get('http://google.com/')
何が起きましたか?私たちはmechanizeにGoogleのホームページをキャプチャさせます。Mechange izeは自動的に関連cookieを貯蓄して、甚だしきに至ってはGoogleからの自動ジャンプを追跡します。Agentは私達に1つのページを捕まえてくるように手伝って、私達はデータを抽出するために用いることができて、リンクを探し当ててそしてクリックしますかますそれとも1つのformを記入します。
続いて、リンクを探してみましょう。リンクが見つかりました。――ページをキャプチャしたり、データを提出したり、formを提出したりした時には、mechangeは一つのpageに戻ります。agentはキャプチャしたページを解析して、一連のリンクをpageの中に入れます。先ほどいただいたグーグルのホームページからすべてのリンクを見つけてみましょう。
page.links.each do |link| puts link.text end
すべてのリンクを一覧表示できますが、mechanizeはより便利な近道を提供してくれます。リンクを見つけてクリックしてください。私たちがtext属性を見つけたいなら、「News」のリンクをクリックしてください。普通、私たちはこうします。
page = agent.click page.links.find { |l| l.text == 'News' }
でも、mechanizeは近道を提供していますので、私達はこうしてもいいです。
page = agent.click page.links.text('News')
この早道は「すべてのtextは「News」へのリンクを見つける」という意味です。この条件に合ったリンクがたくさんあるかもしれません。リンクのセットを「click」メソッドに送ると、mechanizeは一番目をクリックするだけです。二番目をクリックしたいなら、こうすればいいです。
agent.click page.links.text('News')[1]
特定のhrefを含むリンクも見つけられます。
page.links.href('/something')
またはそれらを連結して、特定のtextとhrefを含むリンクを見つけます。
page.links.text('News').href('/something')
Mechanizeが提供するこれらの近道は、frameのセット、iframeまたはformのような、任意のグループで見つけられたものの上に使用することができます。今はどうやって見つけられ、リンクをクリックしたらいいか分かりました。もっと複雑なことを試してみましょう。例えば、formを記入します。Formを記入してください。—Googleの例を続けましょう。現在コードがあります。
require 'rubygems' 
require 'mechanize' 
agent = WWW::Mechanize.new 
page = agent.get('http://google.com/')
このページのソースコードを印刷すると、formを'f'といいます。いくつかのボタンと記入するドメインが含まれています。
pp page
今私たちはこのフォームの名前を知っています。それをキャッチしましょう。
google_form = page.form('f')
Mechanizeはformに入力できるドメインにいくつかの方法でアクセスできますが、一番便利な方法は入力ドメインをformの属性としてアクセスすることです。したがって、'q'というドメインの値を'ruby mechanize'に設定します。
google_form.q = 'ruby mechanize'
この値を設定したことを確認するために、このフォームを印刷してから、同じようなコードが表示されます。
#<www::Mechanize::Field:0x1403488 @name="q", @value="ruby mechanize">
もし'q'の値が変わったら、成功したと説明します。このフォームを提出してもいいです。'ボタンをクリックして、提出ボタンと印刷結果をクリックしてください。
page = agent.submit(google_form, google_form.buttons.first) pp page
私たちが先ほどしたことはgoogleの検索ボックスに'ruby mechanize'を記入してから'Google Search'ボタンをクリックしたのと同じです。もし私たちがそのボタンをクリックせずにformを直接提出したら、値を記入してからリターンボタンを押すのと同じです。今まで書いたコードを見せてください。
require 'rubygems' 
require 'mechanize'              
agent = WWW::Mechanize.new 
page = agent.get('http://google.com/') 
google_form = page.form('f') 
google_form.q = 'ruby mechanize' 
page = agent.submit(google_form) 
pp page
データ抽出を開始する前に、formについて深く調べてみましょう。データのキャプチャに本当に興味がある以外は。このセクションでは、フォームに含まれる可能性のある各種入力コントロールを試してみたいです。PasswordとTextareaは、直接textコントロールとして扱うことができます。Selectはtextにとても似ていますが、関連するサブオプションがたくさんあります。もしあなたがoptionを選択したら、他のoptionの選択をキャンセルします。例えば、一つのリストの中から一つのoptionを選択します。
form.fields.name('list').options[0].select
checkboxとradio buttonを見てみましょう。checkboxを選択するには、このようにするしかないです。
form.checkboxes.name('box').check
Radio buttonとcheckboxは似ていますが、radio buttonを選んだら他の同名のradio buttonは選択がキャンセルされます。checkboxを操作するようにradio buttonを操作します。
form.radiobuttons.name('box')[1].check
Mechanizeはファイルのアップロードを簡単にサポートします。アップロードファイルのコントロールを見つけて、アップロードしたいファイル名を教えてください。
form.file_uploads.file_name = "somefile.jpg"
データを抽出する——–Mechanizeはhprcotを使って解析します。これは何を表していますか?mechanizeのpageをhprcotの対象にしてもいいです。machanizeでターゲットページを見つけたら、[hprcot]を使うことができます。http://code.whytheluckystiff.net /hprcot/)の方法で上記のものを抽出します。
agent.get('http://someurl.com/').search("//p[@class='posted']")
この強力なデータ抽出器の情報については、「Hprict Baics」を参照してください。http://code.whytheluckystiff.net/hpricot/wiki/HpricotBasics)