しゃのんあどべんとかれんだー 18 日目 (Perl 5 で HTML パースしましょ) 匿名 匿名 この記事は、しゃのんあどべんとかれんだー 18 日目の記事です。 ![Perl5](http://3.bp.blogspot.com/-EsnN2U5YrhU/VopzFcAOwLI/AAAAAAAAAWA/E8DyRxa7WPI/s200/perl.png) どうも、munepom (`@__munepom__`) です。 今回は、Perl 5 の HTML パーサに関するおはなし その 1 です。 # HTML から情報をゴリゴリ抽出したいです そんなとき、ありますよね。 HTML を解析して、どこかに別のタグを埋め込みたいこと、ありますよね。 トラッキングタグやビーコンの類などを、動的に埋め込んだりする際に重宝します。 # 今回は、その一例をご紹介します HTML::TreeBuilder を使うと、ドキュメントからタグ指定方法などで情報を参照できます。 ``` #!/usr/bin/env perl use strict; use warnings; use utf8; use LWP::UserAgent; use Encode; use HTML::TreeBuilder; use feature qw/say/; use experimental 'signatures'; ### fields my $url = 'http://shanon.co.jp/'; ### main my $body = get_document($url); process_with_treebuilder($body); ### sub sub get_document ($url) { my $ua = LWP::UserAgent->new; $ua->agent('Shanon'); my $res = $ua->get($url); my $body = $res->decoded_content; } # HTML::TreeBuilder 処理 sub process_with_treebuilder ($body) { # parse my $doc_treebuilder = HTML::TreeBuilder->new_from_content( encode('utf-8', $body) ); my @list_treebuilder = $doc_treebuilder->find_by_tag_name('footer', undef); # タグを指定して、情報を取得 (HTML5 非対応) # print foreach (@list_treebuilder) { say @{$_->content()}[0]; # HTML5 非対応なので、要素ありまへん } } ``` # ...あれ? そう、HTML::TreeBuilder は、HTML5 で新たに導入されたタグ (header, footer など) を認識できないようです。 改善策は、次の記事でご紹介しますね。 レッツ Enjoy! (・ω・)ノ Tweet Share Share Share Share