日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

<< 過去

未来 >>

WWW::MechanizeでPerlのインターネットサーフィン

とあるパスワード認証が必要なWebサービスの更新を確認するため、crondで回すスクリプトを書こうと思った。

そこで WWW::Mechanize を使って書いてみた。


WWW::Mechanize はPerlからあやつるWebブラウザというべきものである。

どういうものかは実例を見てもらうのがよいだろう。

use strict;
use WWW::Mechanize;
use utf8;
use Encode;
use Web::Scraper;
binmode(STDOUT,':encoding(shiftjis)');

my $mech = WWW::Mechanize->new('agent'=>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2');
$mech->get('http://www.google.com/');
$mech->set_fields('q' => '総務省');
$mech->submit;
my $process=scraper{
  process '#resultStats','result'=>'TEXT';
};
my $res=$process->scrape($mech->content);
print $res->{'result'};

ここではGoogleで「総務省」と検索するという動作をさせている。

実際には検索するんじゃなくてパスワードを打ち込んでるんだけど。

まず、WWW::Mechanizeをnewするわけだけど、ここでUserAgentを指定できる。

そして入力するページをgetする。そしてset_fieldsでフォームに入力してsubmitで送信する。これで入力後のページにジャンプしている。

ジャンプ後、ここでは必要なデータを Web::Scraper を使って取り出している。(参考記事 : HTMLにXPathを適用するWeb::Scraper)

ソースコードを直接解析することもできるのだが。Web::Scraperを使えばお手軽。


このようにWWW::Mechanizeでは、フォームで入力・送信することが簡単にできる。

もう1つ簡単にできるのがリンクをたどることで、この2つがこのモジュールのウリ。

今回は自動でWebサービスにログインするということを例に取ったが、他にもいろいろできる。

例えば、Blogに自動投稿するとか、「次へ」のリンクをたどって順に全ての情報を拾うなど使い道は大変多い。


ところで僕がこのWWW::Mechanizeというモジュールを知ったのはPerlではなくてPythonだったんですね。

Pythonにもmechanizeっていうのがありまして。WWW::Mechanizeの移植らしいんだけど。

で、このPythonのMechanizeモジュールを使って書かれたスクリプトを扱う機会があったのだけど、

それというのがDropBoxのアップロードライブラリだったんですよね。

Dropboxにバックアップデータを投げつける

実はPython Dropbox Uploaderでは、DropBoxのWebにログインしてそこからアップロードするという動作をしている。

そのWebへのアクセスにmechanizeを使ってるんですね。

こんな使い方もあるんですよね。これには驚いたもの。

そんなわけだから WWW::Mechanize 使えばできるやん、ってことは世の中多いと思うんで知っておくと便利だと思いますよ。


Author : hidemaro
Date : 2012/03/03(Sat) 23:50
Perl・PHP・Ruby・Python | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools