XPathを知りたくてというか実践したくて使ってみた。
返り値となるオブジェクトがいろいろとでてきてわからないが、
そんなときは refとか isaで型をチェックして、ドキュメントを見て
ということを繰り返せばなんとかなる。
以下毎度お馴染みのサンプルです。ファイル取得の部分も入れてみた。
#!/usr/bin/perl use strict; use warnings; use HTML::TreeBuilder::XPath; use LWP::Simple; use LWP::UserAgent; use File::Basename; use Time::HiRes; my $url = shift @ARGV or die "usage builder_xpath.pl url\n"; my $tree = HTML::TreeBuilder::XPath->new(); $tree->parse( get $url ); my $nodes = $tree->findnodes( '//a' ); my @matchs; foreach my $context ($nodes->get_nodelist) { next unless defined $context->attr('href'); my $href = $context->attr('href'); push @matchs, $href if $href =~ m/\.jpe?g$/ } my $ua = LWP::UserAgent->new(); $ua->agent( 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' ); foreach my $img ( @matchs ) { my $response = $ua->get($img, REFERER => $url); if ( $response->is_error ) { die "Download failed $img\n"; } my $output_name = basename $img; open my $fh, ">", $output_name or die "Can't open $output_name\n"; print $fh $response->content; close $fh; sleep 0.5; }
Web::Scraperを使うともっと楽だろうけど、もっと下のところで
やってみたいということで試してみました。