ブログ以外にも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が頻繁かどうかはともかく結構アカウントは持ってるんだな
とうことがわかりました。