読者です 読者をやめる 読者になる 読者になる

たった*行のコードでHTML取得&解析をしたい場合はWeb::Scraperが便利

perl

なんか無茶振りされたので。
簡単!たった13行のコードでHTML取得&解析をするPerlスクリプトWeb::Scraper というモジュールを使って書き直すと、こんな感じになります。

use strict;
use Web::Scraper;
use LWP::UserAgent;
use Encode;
my $scraper = scraper {
    process "#topicsfb li" => "topics[]" => "TEXT";
};
$scraper->user_agent(
    LWP::UserAgent->new(
        agent => "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
    )
);
my $result = $scraper->scrape( URI->new("http://www.yahoo.co.jp") );
print encode_utf8($_), "\n" for @{ $result->{topics} };

scraper { } で、HTML を解析して結果を取得するための定義を行っています。ここでは

  • CSS selector 記法で「id="topicsfb" 内の li 要素 (#topicsfb li)」を
  • 「結果の topics というキーに配列で (topics[])」
  • 「テキストノード (TEXT)」の内容を取得する

という定義になります。

で、$scraper に対して URI を渡してやると、HTML取得、解析して結果作成までを一発でやってくれます。(URI 以外にもHTML文字列や HTTP::Response オブジェクトなども渡せます)
詳しくは ドキュメントをどうぞ。
抜き出したい要素を CSS selector (または XPath) で指定することができるので、HTML::TreeBuilder の API を覚えるよりも簡単じゃないでしょうか。
See also HTML::TreeBuilder のメソッドを覚えるには人生はみじかすぎる件について.