テストやっとこ終わった。id:omochistも勉強再会したようですし、うちも更新再開ですよ。
今回は、これからいろいろ使いそうなWWW::Mechanizeモジュールを試してみた。WWW::Mechanizeはすてきなモジュールで、PerlにWebブラウジングをさせることができる。これを使って月並みだけどGoogle検索を行うスクリプトを書いてみた。
まず、準備。
use strict; use warnings; use WWW::Mechanize; use HTML::TreeBuilder::XPath; use Encode; use Readonly; sub say {print @_, "\n";}
おもむろに、WWW::Mechanizeオブジェクトを作って、
my $mesh = WWW::Mechanize->new();
さらに、Googleにアクセスして、フォームに「Perl」と入力してSubmit。レスポンスも取得。このあたりがWWW::Mechanizeのキモなのね。
# Googleにアクセス $mesh->get('http://www.google.com'); # 検索フォームにPerlを入力してサブミット my $res = $mesh->submit_form( fields => { q => 'Perl', } ) or die 'submitting failed'
あとは、レスポンスのHTMLを解析して結果を出力。今回はXPathを使ってみた。
# レスポンスを取り出してパース my $tree= HTML::TreeBuilder::XPath->new; $tree->parse($res->content()) or die "parsing failed"; # 結果をXPathで取り出して表示 my @nodes = $tree->findnodes( '/html/body//div[@class="g"]/a[@class="l"]' ); for my $node (@nodes) { say encode_utf8(decode('shiftjis', $node->as_text)), ' (', $node->attr('href'), ')'; }
で、これを実行すると、
$ perl www-mechanize.pl Perl - Wikipedia (http://ja.wikipedia.org/wiki/Perl) Perl基礎入門 (http://www.kent-web.com/perl/index.html) とほほのperl入門 (http://www.tohoho-web.com/wwwperl.htm) Perlメモ (http://www.din.or.jp/~ohzaki/perl.htm) Perlで書く (http://www2u.biglobe.ne.jp/~MAS/perl/index.html) Perl for Newbie(Perl初心者の部屋) (http://www.harukaze.net/~mishima/perl/) Perl&CGI最強講座 ++++[smart] (http://www.rfs.jp/sitebuilder/perl) Perlとは - はてなダイアリー (http://d.hatena.ne.jp/keyword/Perl) Perl.com: The Source for Perl -- perl development, conferences (http://www.perl.com/) The Perl Directory - perl.org (http://www.perl.org/)
という感じになって、コマンドラインからGoogle検索ができた。
WWW::Mechanizeはもっといろいろなメソッドがあって、フォームをSubmitするときにどのボタン押すとかいろいろできるみたい。今回はとりあえずいちばん簡単に検索フォームをうめて実行というだけをやってみた。
まぁ、Google検索自体はすでにたくさんモジュールがあるのでそれを使うのがてっとりばやいので、このスクリプトのやり方自体はナンセンスなんだけど、まずは、習作と言うことで。