理系学生日記

おまえはいつまで学生気分なのか

Youtube を検索して動画の URL を抽出するには

という話が最近ありましたが、こういう話には WWW::Mechanize と Web::Scraper があればほとんどの用はたせるんじゃないかと思います。

use strict;
use warnings;
use WWW::Mechanize;
use Web::Scraper;
use Perl6::Say;
use Encode;

binmode STDOUT => ':utf8';

my $mech = WWW::Mechanize->new;
   $mech->agent_alias('Mac Mozilla');
   $mech->get( URI->new('http://www.youtube.com/') );
   $mech->submit_form(
       form_name => 'searchForm',
       fields    => {
           search_query => Encode::decode('utf-8', '猫鍋'),
       },
   );

my $result = scraper {
    process 'div.video-entry', 'movies[]' => scraper {
        process 'a',                    'link'  => '@href';
        process 'div.video-long-title', 'title' => 'TEXT';
    }
}->scrape( $mech->response );

for my $entry (@{$result->{movies}}) {
    say       $entry->{link}->as_string;
    say "\t", $entry->{title};
}
% ./mech.pl | head -6
http://www.youtube.com/watch?v=sJMMOyFqTNg
        猫鍋
http://www.youtube.com/watch?v=JJltke9Lgik
        猫なべ
http://www.youtube.com/watch?v=F7S6vc7BiEk
        チビスケ一家 猫鍋