Twitterやってる AV女優を調べる

ブログ以外にもTwitterやってる人も多いよね、ということでコードを書いた。
情報を集めさせていただいたサイトでは onclick経由で該当のサイトに飛ぶんだけど、
Web::Scraperの場合 'onclick'であっても, 'onClick'と書かないといけませんでした。
注意はそれぐらいですね。


以下コードです. 名前, URL, Twitter IDを TSVで出力します。

#!/usr/bin/env perl
use strict;
use warnings;

use URI;
use Web::Scraper;
use List::Util qw(max);

binmode STDOUT, ":utf8";

my $base = 'http://www.avfan.org/index.php?page=';

my $actress_twitter = scraper {
    process "div.avmodel", 'infos[]' => scraper {
        process 'h2', name => 'TEXT';
        process 'div.tw > a', url => '@onClick';
    };
    process "div.pagination > ul > li", "pages[]" => scraper {
        process 'a', num => 'TEXT';
    };
};

my @twitter_infos;
my ($n, $lastpage) = (1, 1);
while ( $n <= $lastpage) {
    my $site = "${base}${n}";
    my $res = $actress_twitter->scrape(URI->new($site));

    if ($lastpage == 1) {
        $lastpage = max ( grep {
            defined $_ && $_ =~ /^[0-9]+$/
        } map { $_->{num} }@{$res->{pages}});
    }

    for my $info (@{$res->{infos}}) {
        my $name = (split /\s/, $info->{name})[1];

        next unless defined $info->{url};
        my ($url) = $info->{url} =~ m{window\.open\('([^']+)'\)};
        my ($id) = $url =~ m{([^/]+)$};
        push @twitter_infos, join "\t", $name, $url, $id;
    }

    $n++;
}

print "$_\n" for @twitter_infos;

使い方

  % perl actress_twitter_collect.pl | tee twitter.info
  % grep --color=none '桜' twitter.info
  桜ここみ        https://twitter.com/Cocomi_Sakura       Cocomi_Sakura
  小向杏奈(桜井麻美)      https://twitter.com/komukai_anna        komukai_anna
  桜ノ宮てんま    https://twitter.com/satsugai_usagi      satsugai_usagi
  小桜沙樹        https://twitter.com/sakippo810  sakippo810
  桜木凛  https://twitter.com/rin0303rin  rin0303rin
  桜花舞  https://twitter.com/nh_maimai   nh_maimai
  桜井あみ        https://twitter.com/sakurai_ami sakurai_ami

取れました。Tweetが頻繁かどうかはともかく結構アカウントは持ってるんだな
とうことがわかりました。