すっかり出遅れた(というか忘れていた)Monday Module HTML::LinkExtorの巻ですが、あまりぱっとしたものが思いつかなかったので、このモジュールの機能をコマンドラインから便利に使いましょうというネタで。
んーっとMonday Moduleのネタはnaoyaさんちあたりを参照してください。私のは指定したURLのリンクを抜き出して、列挙するだけのスクリプトです。面白くも何ともありませんね。% extlink http://module.jp/ | head http://module.jp/ http://module.jp/ http://module.jp/book/ http://module.jp/cookbook/apache_api/ http://module.jp/blog/ http://module.jp/about.html http://module.jp/index.rdf http://module.jp/book/ mailto:oyama@module.jp http://www.gihyo.co.jp/なので、取り出すタグとその属性を指定できるようにしています。
$ extlink -t=img -a=src http://module.jp/blog/gaap-wind.html http://module.jp/image/gaap-2003051801.pv.jpg http://module.jp/image/gaap-2003051802.pv.jpg http://module.jp/image/gaap-2003051803.pv.jpg http://module.jp/image/gaap-2003051804.pv.jpg http://module.jp/image/gaap-2003051805.pv.jpg http://module.jp/image/gaap-2003051806.pv.jpg http://module.jp/image/gaap-2003051807.pv.jpg http://module.jp/image/gaap-2003051808.pv.jpg http://module.jp/image/gaap-2003051809.pv.jpg http://module.jp/image/gaap-2003051810.pv.jpg http://module.jp/image/panda_book.jpgこの場合imgタグのsrc属性を取り出しなさい、という指定です。grepやuniqやsortを組み合わせると、Webサイトのメンテナンスやクロールに何か役立つかもしれません。っつーかこういう用途にHTML::LinkExtorを使うと、ハイパーリンク要素しか取り出せないので汎用性が落ちてしまいます。そのため本来はHTML::Parserを素直に使った方がより汎用的ですね。
#!/usr/bin/perl -s use LWP::Simple; use HTML::LinkExtor; use strict; our $h; # option show usage our $t; # option tag our $a; # option attr my $url = shift; exit show_usage() if $h || !$url; $t ||= 'a'; $a ||= 'href'; my $parser = HTML::LinkExtor->new(sub { my ($tag, 0nk) = @_; return unless $tag =~ /^$t$/i; return unless exists $link{$a}; print $link{$a}, "\n"; }, $url); my $html = get($url) or die "$0: cannot connect url: $url\n"; $parser->parse($html); exit 0; sub show_usage { warn <<__USAGE__; Usage: $0 [h] [-t tag] [-a attr] http://example.jp/ __USAGE__ return 1; } __END__ =head1 NAME extlink - Extract links from an HTML document =head1 SYNOPSIS $ extlink http://example.jp/ $ extlink -t=img -a=src http://img.example.jp/ $ extlink http://directory.example.jp/ | grep ^mailto: > to_spam.txt =cut昔このモジュールでWebサイトの改ざん監視ツールを洒落でかいて、なぜかサーバ監視で利用されてしまっていたりしましたが、あのネタもいい加減マンネリなので。