そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

超映画批評のスコアをスクレイピングする

昨日だか一昨日だかに超映画批評をスクレイピングしてランキング化するサイトを作った的なホットエントリがあって(リンクはしない)、 「他人様のコンテンツを勝手にぶっこ抜いてウェブサービス化するのはモラル的にあかんやろ・・・」と思ったりしたところ。

movie.maeda-y.com

厳密にアウトの線引きをしようと思うと意外と悩ましいところだけど、 サイトの売りであるところの本文を前文だけとはいえ勝手に持ってきて表示して、 結果的にアクセス機会を奪ってしまうような作りは流石にマズイんじゃないかと僕なりには思う。

じゃあまとめサービスとかで手動でランキング化したリンク記事は良いのかというとそれも微妙だけども。


それはそれとして、超映画批評は僕もちょくちょく覗いていて、 「なるほどなぁ」と思ったり「それは違うよなぁ」と思ったり暇なときに観る映画の参考にしたりする。

で、確かにランキングが欲しいと思うことも少なくない。

スクレイピングの練習問題としては手頃だし実用的で面白い気もするので、 自分で使う用にスクリプトを組んでみた。

(もしかすると人によってはダブスタに見えるのかもしれないけど、 僕なりには個人の利便性の追求の範囲ならOK、というか本質的には止めようがないと思ってる)

方法を考える

記事のURLを確認するとhttp://movie.maeda-y.com/movie/02078.htmみたいに連番(欠番あり)のIDのついたファイル名となっていそう。

また、タイトルと点数は確認する限りだと

<h1 class="title">「テラフォーマーズ」5点<span class="title2">(100点満点中)<br>
監督:三池崇史 出演:伊藤英明 武井咲
</span></h1>

のように特定のタグ内に記載されていそうな感じ。

なのでループでページを開き、正規表現でタイトルとか点数とかを拾ってきて処理すれば良さそう。

スクリプト化してみる

指定された開始IDから終了IDまでのページをクロールし、欲しい部分をスクレイピングする。

超映画批評をスクレイピング

サイトに負荷を与えないように適時sleepを入れるのを忘れてはいけない。


最終的にはタブ区切りでID、タイトル、点数、URLが出てくる。

これをsortコマンドなんかでランキング化したりして利用できる。

使用例

今年の最新は『追憶の森』のID:2081番、今年の最古は『ブリッジ・オブ・スパイ』のID:2057番っぽいので、 この辺を点数順に並べてみる。

sortコマンドでタブ区切り、3項目を数値として逆順で指定。

perl ./fetch_score.pl 2057 2081 |sort -nrk3 -t $'\t'
2057 -> 2081 at ./fetch_score.pl line 11.
2057 at ./fetch_score.pl line 15.
略
2081 at ./fetch_score.pl line 15.
2060    ザ・ウォーク  90  http://movie.maeda-y.com/movie/02060.htm
2080    シビル・ウォー/キャプテン・アメリカ  85  http://movie.maeda-y.com/movie/02080.htm
2072    あまくない砂糖の話 85  http://movie.maeda-y.com/movie/02072.htm
2071    マジカル・ガール    85  http://movie.maeda-y.com/movie/02071.htm
略
2073    天使にアイム・ファイン   35  http://movie.maeda-y.com/movie/02073.htm
2063    セーラー服と機関銃 -卒業-    35  http://movie.maeda-y.com/movie/02063.htm
2078    テラフォーマーズ    5   http://movie.maeda-y.com/movie/02078.htm

『シビルウォー』は僕の実感とも一致する高得点なようだ。(批評内容はいささか同意しかねるが)

blue1st.hateblo.jp

それより更に高い点がついている『ザ・ウォーク』は、題材に惹かれずにスルーしたんだけど、 こうも好評だとちょっと見てみたくなる。

ザ・ウォーク (字幕版)

ザ・ウォーク (字幕版)


ランキング作る他にも例えばiPythonあたりに食わせて点数のバラつきを見てニヤニヤするだとかそういう遊び方もできそう。