Blog

Monday Module(遅っ) HTML::LinkExtor

By Hiroyuki OYAMA Mon Nov 24 23:09:22 2003

すっかり出遅れた(というか忘れていた)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サイトの改ざん監視ツールを洒落でかいて、なぜかサーバ監視で利用されてしまっていたりしましたが、あのネタもいい加減マンネリなので。

Comments

Post a comment

Name:


URL:


Comments:


WebエンジニアのためのApacheモジュールプログラミングガイド

ApacheをHackする!
モジュールプログラミング強烈初体験!!
定価: 2,919円(税込)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Blog > Monday Module(遅っ) HTML::LinkExtor