簡単なWWW::Mechanize

テストやっとこ終わった。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検索自体はすでにたくさんモジュールがあるのでそれを使うのがてっとりばやいので、このスクリプトのやり方自体はナンセンスなんだけど、まずは、習作と言うことで。