• ベストアンサー

PerlのモジュールにWWW::Mechanizeについて

PerlのモジュールにWWW::Mechanizeというものがありますが、これはリンクやフォームを制御する場合は便利ですが、HTMLのタグ(例えば、<title>この部分</title>)を抽出する場合などは、HTML::TreeBuilderを使えば良いのでしょうか? また、WWW::Mechanizeに詳しい書籍(英語でもOK)がありましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#WWW::Mechanizeを使う場合以下のようにすればいいです。 --------------------------------------------------------------- use WWW::Mechanize; my $mech = WWW::Mechanize->new(); $url="http://okwave.jp/kotaeru.php3?q=1834110"; $mech->get( $url ); $title=$mech->title(); print $title; ---------------------------------------------------------------- タイトルをゲットしたHTMLから取り出すだけなら 参考URLの様にLWPを使えばいいと思います。 ようするに同じことをしていると思われます。 パーサーは、結局の処それぞれ好きなの使えばいいと思います。

参考URL:
http://okwave.jp/kotaeru.php3?qid=1758795
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PerlのWWW**Mechanizeのオブジェクトから中身を取り出す

    PerlのWWW**Mechanizeのオブジェクトから中身を取り出す方法。 WWW:Mechanaizeでリンクの一覧を取得しようと思い 以下のようなコードを書きましたが、リンク一覧がWWW::Mechanize::Linkオブジェクトで取得されます。 解説文を読んでもここからどうやってテキストのアドレスを取得すればいいか分からないです。 何かメソッドを実行すればよいのでしょうか? わかりにくい質問かと思いますがご回答お願いします。 ……………………………………………………………………………… #WWW:Mechanizeの読み込み use WWW::Mechanize; #サイトの取得 $w = WWW::Mechanize->new(autocheck => 0); $w->get("URLが入ります。"); @link_list=$w->links; foreach ${_} (@link_list){print"${_}\n";}     ↓ WWW::Mechanize::Link=ARRAY(0x243c564) WWW::Mechanize::Link=ARRAY(0x243c564) とオブジェクトで返されてしまう。 ………………………………………………………………………………

    • ベストアンサー
    • Perl
  • ActivePerlのWWW::Mechanize::Firefoxに

    ActivePerlのWWW::Mechanize::Firefoxについて教えてください。 http://maaash.jp/perl/wwwmechanizefirefox%E3%81%A7%E7%B0%A1%E5%8D%98%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/ 上記のURIを参考にHPの自動テストとスクリーンショットを行うプログラムを作ろうとしています。 当方はPerl及びLinuxsは素人です。 まず、Windows XP sp3に ActivePerl v5.10.1をインストールして 上記サイトに記述されているソースをもとにソースファイルを作り実行したところ 「Can't locate WWW/Mechanize/Firefox.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) line 3」 とエラーが表示されたので。 http://search.cpan.org/~corion/WWW-Mechanize-Firefox-0.31/ ↑よりファイルをダンロードして「Perl Package Manager」でインストールしたところ 「WARNING: Installing WWW-Mechanize-FireFox-0.11 would downgrade HTML::Display::MozRepl from version 0.31 to 0.11」と表示されます。 そこから色々と調べながらやっているのですが先に進めません。 Googleで調べてみると「WWW::Mechanize」ってすげー簡単とか賞賛する書込みが多いためすごい ショックでくじけまくってます。 先に進むためのヒントだけでもお願いできないでしょうか?

  • WWW::Mechanizeについて教えてください

    WWW::Mechanizeついて 質問させて頂きます。 他でも質問しておりますが、回答が無かったためマルチですがご了承ください。 WWW::Mechanizeを使ってログインしようとしてるのですが、うまく行きません。 <form action="login.cgi" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="submit" name="submit" value="LOGIN" /> 上記のフォームでは正常に取得できます。 しかし、ログインチェックをJavascriptからPHPに渡ってるページでの ログインがうまく行きません。 ソース //入力チェック /*login_checkたとえです*/ function LOGIN(){ $( "userid" ).className = ""; $( "userpassword" ).className = ""; if( login_check( "id" ) ){ if( login_check( "pass" ) ){ document.form1.action = "login.php"; document.form1.Btn_Type.value = "login"; document.form1.submit(); }else{ $( "pass" ).className = "error"; } }else{ $( "id" ).className = "error"; } } <form action="login.php" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="button" name="loginbtn" value="LOGIN" onclick='JavaScript:LOGIN();'/> 上記のフォームにログインしようと下記のようにしました。 my $loginUrl = 'http://hoge.jp/login.php'; my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar); $mech->agent_alias('Windows IE 6'); $mech->get($loginUrl); $mech->form_name('form1'); $mech->field( id => "test" ); $mech->field( pass => "test" ); $mech->click_button( value => 'Login' ); print $mech->content(); これで実行するとエラーがでます。 Can't call method "header" on an undefined value at /usr/lib/perl5/site_perl/5.8.8/WWW/Mechanize.pm line 2471. $mech->click_button( value => 'Login' ); 上記のclick_buttonでvalueを指定するとエラーになります。 WWW::MechanizeはJavascriptは実行できないのでしょうか? お知恵をお貸しいただけませんでしょうか。 説明不足かもしれませんがお願い致します。

    • ベストアンサー
    • Perl
  • WWW::Mechanizeの文字コードについて質問

    WWW::Mechanizeの文字コードについて質問 以下のようなソースコードを書いて実行してみたのですが どのサイトを取得しても、すべて文字コードがUTF8だと認識されます。 ------------------------------------------------------- #!/usr/bin/perl #WWW:MechanizeでHTMLの取得 use WWW::Mechanize; $w = WWW::Mechanize->new(); $w->get("URL"); $html=$w->content; #文字コードの判別 use Encode; use Encode::Guess qw/ascii utf8 euc-jp shiftjis 7bit-jis/; my $dec = Encode::Guess->guess($html); print$dec->name; ------------------------------------------------------- 例えば以下のサイトは文字コードがEUC-JPですがこれもprintされるのはUTF8となってしまいます。 http://barukanlog.blog31.fc2.com/blog-entry-541.html WWW:Mechanizeでサイトを取得し、サイトの文字コードを調べてすべてsjisにする ということがしたいのですが、すべてutf8に判断されて先へ進めないんです。 何か設定やメソッドを追加しなくてはいけないのでしょうか? わかりにくい質問かとは思いますがご回答お願いします。

  • WWW::Mechanizeを使っておられる方、又は使える方に質問です。

    WWW::Mechanizeを使っている方、使える方にお聞きしたいです。 下記のような適当なURLを読みこんでそのリンクを辿るコードを書きました。 リンクが見つからなかった場合のチェックが正常に働くかの確認ため、 15行目でわざと存在しないlinkを指定してみました。 16行目で止まって欲しいのですが、止まりません。最終行の様にすると止まります。 この振舞いは私だけでしょうか? もしお手持ちの環境でMechanizeが使える方、試せる方がおられましたら 結果を教えて頂けたら幸です。 1つ気になっているのは、installのmeke testの段階で、 以下に関しエラーが出てはおりました。 t/live/follow.t t/live/follow_link.t t/live/get.t t/local/back.t 私の環境は RHL9, perl, v5.8.0 gcc 3.2.2 です。 #!/usr/bin/perl -w use strict; use WWW::Mechanize; use LWP 5.803; my $url="http://www.yahoo.co.jp"; my $mec=WWW::Mechanize->new(); my $response=$mec->get($url); $mec->success() or die $mec->res->status_line(); # $urlが存在しない場合はここで止まって欲しいし実際とまることを確認。 my $a=$mec->follow_link(url_regex => qr/bad_html$/); #存在しないリンクを指定 $mec->success() or die $mec->res->status_line(); #ここで止まることを期待するが止まらない。 #$a or die "Failed to find links\n"; #こうすれば止まる。

    • ベストアンサー
    • Perl
  • レンタルサーバーでWWW::Mechanize使う方法

    ka○○yaレンタルサーバーのスタンダードプランでは、WWW::Mechanizeがインストールされていないので、 サポートに問い合わせしたところ > 動作保証、検証、サポートを行っておりませんがお客様にてモジュール > をサーバーにアップロード頂いて設定を頂くことで動作が可能である場合がござ > います。 とのことです。 Telnetが使えない環境でモジュールをアップロードして使う方法をご教授して頂けないでしょうか?

    • ベストアンサー
    • Perl
  • Perl/TkのWWW::MechanizeのGET失敗時の動作

    WindowsにてPerl/Tkを使用しております。 WWW::MechanizeのGETを使って(おそらく)404 not foundを受信した後の動作の制御の仕方がわかりません。 下記ソースを実行して貰うとわかると思うのですが、 GETが失敗したら即sub関数内をreturnしてしまいます。 #!/usr/bin/perl use Tk; use Encode; use WWW::Mechanize; my $mech = new WWW::Mechanize(autocheck => 1); my $main = MainWindow->new; $main->Button(-text=>decode("cp932",'取得'),-font => ["MS ゴシック", 12], -command => \&get_source) ->grid(-row=>0,-column=>0); my $list = $main->Listbox(-selectmode=>'single',-font => ["MS ゴシック", 12]); $list->grid(-row=>1,-column=>0,-sticky=>'ew'); MainLoop; sub get_source{ my $uri = "http://www.google.co.jp/abcd"; $mech->get($uri); print "get_source end\n"; } 上記の「print "get_source end\n";」は実行されません。 データ取得先サイトがメンテナンス中は404になるようで困っています。 イメージでは「$mech->get($uri) or die "get_source error";」みたいな感じにエラーの場合の時の処理を記述したいのです。 ご存知の方いましたらご教示願います。 使用環境 ・Windows XP Professional SP3 ・Active Perl v5.8.6 for MSWin32-x86-multi-thread build811 ・自作PC(CPU:Athlon 64 3800+)

    • ベストアンサー
    • Perl
  • perlでhtml 解析

    perlでhtmlを解析して、ほしい情報を抽出したいのですが、 タグで囲まれたテキスト情報を抽出できるものは多くありますが タグの中の情報を取得できるモジュールや方法はありますか? たとえば html内の  <a href="******" onclick="return opendetail(******);"> のなかの********を抽出をしたいです。

    • ベストアンサー
    • HTML
  • Mechanizeにおけるボタンクリックについて

    Perl Mechanizeを使って、下記HTMLの"表示"と表示されているボタンを押したいのですが、いろんなパターンを利用しても押せません。処理後の$mechのコンテンツをテキストで見ると、処理前後で更新(html遷移)がありません。試した、パターンは以下です。ActivePerl Verは5.8.8、OSはWindows XP SP2、mechanizeはver0.72です。 また、$mech->click_button('value' => '表示');を使うため、mechanizeをPPMを使ってver1.54にUpdateすると、 「Can't call method "header" on an undefined value at C:/Perl/site/lib/WWW/Mechanize.pm line 2347.」 というエラーがでて、click_button()のところでストップします。Mechanize.pmでuseしている各種パッケージをUpdateしても同様なエラーが出てclick_button()のところでストップします。 下記対象htmlのボタンを押すにはどうしたらよいでしょうか?皆様、よろしくお願いします。 1.パターン1 $mech->submit_form(  form_number => '1',   fields => {    0 => "1",    1 => "2",   }, ); 2.パターン2 $mech->submit_form(  form_number => '1',   fields => {    0 => "1",    1 => "2",   },  button => '' ); 3.パターン3 $mech->form_number(1); $mech->field( 0, 1 ); $mech->field( 1, 2 ); $mech->click(); 4.パターン4 $mech->form_number(1); $mech->field( 0, 1 ); $mech->field( 1, 2 ); $mech->submit(); 5.対象html <html><head><title>タイトル</title></head><body> ■中タイトル1<br><br><form action="/URL" method="post"><input type="hidden" name="NAME" value="ABCD"> [小タイトル1] <br><select name="0"> <option value="0">AAA</option> <option value="1">BBB</option> <option value="2">CCC</option> <option value="3">DDD</option> </select><br> [小タイトル2]<br> <select name="1"> <option value="0">AAA</option> <option value="1">BBB</option> <option value="2">CCC</option> </select><br> <input type="submit" value="表示"></form> <hr>該当データなし。<br><hr>

    • ベストアンサー
    • Perl
  • Perlモジュールのparam()を使って

    ネットでいろいろ調べていたらPerlモジュールのparamですべてのパラメーターを得る場合引数をいれずに param()とすればいいとかかれていたので、すべてのパラメーターから,カンマがあればエラーにするという構文を書こうとしましたがうまくいきません。 @params = param(); foreach $param (@params) { if($param =~ /\,/){&error('フォーム内に「,」は入力できません。');}; } 上のようにしてもスルーします。 間違っているのだと思いますが、すべてのパラメーターからマッチングさせたい場合どのようにすればいいのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Perl