process行では、指定したCSSセレクタの条件にマッチしたものを「どうするか」も指定する。どのようにするかの指定は、次の書式だ。
設定値 => 取り出す値
必要に応じて、カンマでつなげて複数取得することもできる。「取り出す値」の部分には、次のものを指定する。
1)'text'
'text'と記述すると、抜き出した要素に囲まれているテキストを指定したことになる。
2)'@属性名'
'@属性名'と記述すると、その要素の属性の値を指定したことになる。基本的に、この属性値はテキストである。しかしながら、href属性に限り、URIオブジェクトになる。
3)関数の戻り値
「sub {}」のように関数のクロージャを記述すると、その関数内で処理した結果を設定できる。関数内では、「$_」が、要素に格納されているテキストを示すので、好きなような加工ができる。
リスト1では、process行を次のようにしている。
process 'div#postranking > div.rankingdata',
'term[]' => 'text';
この結果、CSSセレクタの条件に合致するごとに、次が実行されるのだ。
term[] => 'text'
これは「termという名前の配列に、要素内のテキストを追記していく」という意味になる。ここでは「term[]」と配列にしているが、次のように右辺に配列ではない値をとることもできる。
'term' => 'text';
HTMLの中に、配列にする必要がなく、単一値しかありえないもの(例えば、<title>の中身など)の場合には、右辺には、配列ではない値を指定することになるだろう。
ちなみに、結果が配列になるにもかかわらず、配列にしなかったときには、CSSセレクタにマッチするものが見つかるたびに、値が上書きされるので注意しよう。
result行では、process行で取り出した値を、どのようにして最終結果とするのかを指定する。
リスト1では次のように記述していた。
result 'term';
この結果、process行で保存しておいた「term」の値が最終的な結果として得られる。
今回の記事では、ランキングの基となるデータをHTMLからスクレイピングし、グラフ化を行うという基礎から実際のスクリプト内容を解説した。しかし、ここまでではグラフ化を行う中盤までしか至っていない。次回の記事でグラフ化を実際に行うまでの処理を紹介していこう。
Copyright © ITmedia, Inc. All Rights Reserved.