なんか無茶振りされたので。
簡単!たった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 のメソッドを覚えるには人生はみじかすぎる件について.