DC4

今よく言われてる「草食系」にはなったらあかん! 野獣のような「肉食系」になるため、今は肉ばっかり食べてるよ。

Perlでおっぱい画像を収集してみた。

引き続きPerl勉強中です。

リャマ本を片手に作ってみました。

その①

#!/usr/bin/perl

use strict;

use warnings;

use LWP::UserAgent;

use HTML::TreeBuilder;

use URI;

use Digest::MD5 qw(md5_hex);

use Path::Class qw(dir file);

use Encode;

use utf8;

my $uri = URI->new('http://search.naver.jp/image');

my $content_ua = LWP::UserAgent->new;

my $img_ua = LWP::UserAgent->new;

my $dir = dir('./data');

my $dl_count = 0;

$uri->query_form(

'o_sf' => 1, #0にすると・・・。

'q' => 'おっぱい'

);

my $res = $content_ua->get($uri);

my $tree = new HTML::TreeBuilder;

$tree->parse($res->content);

$tree->eof();

foreach my $tag ($tree->find("img")) {

next unless defined($tag->attr('src'));

my $filename = md5_hex($tag->attr('src')) . '.jpg';

my $filepath = $dir->file($filename);

$res = $img_ua->get( $tag->attr('src'), ':content_file' => $filepath->stringify );

unless ($res->content_type =~ m|^image/jpeg$|) {

unlink $filepath;

next;

}

print encode_utf8("$filename"."\n");

$dl_count++;

}

print "Total:$dl_count"."\n";

$tree = $tree->delete;

HTML::TreeBuilderを使用して、画像検索から必要なタグを取得します。

但し、画像検索結果はAjaxで動的に取得するので一定数迄しか取れません。

その②

#!/usr/bin/perl

use strict;

use warnings;

use LWP::UserAgent;

use HTML::TreeBuilder;

use URI;

use Digest::MD5 qw(md5_hex);

use Path::Class qw(dir file);

use Encode;

use utf8;

die "USEAGE:perl opp2.pl targetURL \n" if (@ARGV < 1);

my $target_url = shift @ARGV;

my $uri = URI->new($target_url);

my $content_ua = LWP::UserAgent->new;

my $img_ua = LWP::UserAgent->new;

my $tree = new HTML::TreeBuilder;

my $dir = dir('./data');

my $dl_count = 0;

my $res = $content_ua->get($uri);

$tree->parse($res->content);

$tree->eof();

#ページ数の取得

my @pager=split(/ /,$tree->look_down("class", "MdPagination03")->as_text);

my $max_page = $pager[-1];

for(my $page_count = 1; $page_count <= $max_page; $page_count++){

print "Now Download page : $page_count \n";

$uri->query_form('page' => $page_count);

my $res = $content_ua->get($uri);

my $tree = new HTML::TreeBuilder;

$tree->parse($res->content);

$tree->eof();

foreach my $tag ($tree->look_down("class","MTMItemThumb")) {

next unless defined($tag->attr('src'));

my $filename = md5_hex($tag->attr('src')) . '.jpg';

my $filepath = $dir->file($filename);

$res = $img_ua->get( $tag->attr('src'), ':content_file' => $filepath->stringify );

unless ($res->content_type =~ m|^image/jpeg$|) {

unlink $filepath;

next;

}

print encode_utf8("$filename"."\n");

$dl_count++;

}

}

print "Total:$dl_count"."\n";

$tree = $tree->delete;

画像検索ではなく、まとめサイトのURLを使用して取得します。

やっている事は①と同じですが、先にページ数を取得して全ページの画像を収集します。

参考サイト

いかにしておっぱい画像をダウンロードするか〜2012

HTML::TreeBuilder これだけ覚えりゃ、とりあえずOK(?)