またまた正規表現の練習
ミッション
ひまわり動画からサウスパークの動画を取得し、リンク形式で出力せよ!
use strict; use warnings; use LWP::Simple; my $url; my $html; open(my $out, ">" , "south.html") or die("could not open file."); for (my $i = 0; $i <= 10; $i++) { #1 .. 10ページ取得 $url = "http://himado.in/?sort=today_view_cnt&keyword=サウスパーク&page=$i"; $html = get $url; while ($html =~ m{<a.*?href='(http://himado\.in/[1-9]+)'.title='.{7}(.*?)'}g) { #リンク形式で出力 qqはダブルクォーテーション print $out qq(<a href="$1" title="$2">$2</a><br>\n); } } close($out);
ミソは$urlを入れ替えることによってページを切り替えているところです。
ソートした結果はこちら。
結果を見てもらえば分かるがエピソードがいくつか抜け落ちており古いシリーズほどそれが顕著に表れている。シリーズ1,2に至っては一つも取得できていないのが見て分かる。
取得できたURLの例
<a href='http://himado.in/21537' title='サウスパーク 041 s03e10 チンポコモン' rel="nofollow"> <a href='http://himado.in/116696' title='サウスパーク 236 s16e13 A Scause for Applause' rel="nofollow"> <a href='http://himado.in/86374' title='サウスパーク 224 s16e01 Reverse Cowgirl' rel="nofollow">
取得できなかったURLの例
<a href='http://himado.in/10343' title='サウスパーク 067 s05e02 ”金”解禁' rel="nofollow"> <a href='http://himado.in/10318' title='サウスパーク 042 s03e11 宇宙戦士! 腹ぺこマーヴィン' rel="nofollow"> <a href='http://himado.in/87200' title='サウスパーク 225 s16e02 Cash For Gold' rel="nofollow">
ご覧のとおり、まったく違いがわかりません!
取得できなかったURLも正規表現には引っかかると思われるのできっと get されていないのだろうと推測できるわけですが肝心のソースを見るとはっきりとURLが書いてあるのです...\(^o^)/
未解決:-(