スクレイピングで記事ランキングのグラフ化まとめサイト2.0(4/5 ページ)

» 2007年12月18日 12時27分 公開
[大澤文孝,ITmedia]

条件と抜き出す値を決める

 process行では、「どんな条件に合致するものを見つけて、何を抜き出して、どのように結果を設定するのか」を指定する。


process 抜き出したい条件, 何をどこに設定するか

CSSセレクタによる条件指定

 Web::Scraperでは、スクレイピングの条件として、「CSSセレクタ」を用いる。CSSセレクタとは、HTMLコンテンツとCSSとを結びつける際に使われる、要素を特定するための書式だ。詳細については、http://www.w3.org/TR/css3-selectors/を参照してほしい(ただし、すべてのセレクタが利用できるわけではない)。

 CSSセレクタは指定方法が多数あり、ここですべてを紹介することはできない。しかしスクレイピングするにあたっては、下記の構文を覚えておけば、ほとんど間に合うはずだ。

1)id属性値の特定

 特定のid属性値をもった要素にマッチさせたいときには、「要素名#属性値」という書式を使う。

 例えば「div#postranking」は、「<div id="postranking">」という要素を特定する。

 id属性は、コンテンツ内で唯一無二の値であるから、この指定をした場合、マッチする要素は、ただ1つに決まる(ただしHTMLが不正な場合は、この限りではない)。

2)class属性値の特定

 特定のclass属性値をもった要素とマッチさせるには、「要素名.クラス名」という書式を使う。例えば「div.rankingdata」は、「<div class="rankingdata">」という要素を特定する。

 ただしclass属性は、空白で区切って複数の値をとることもできるので注意してほしい。CSSとしては、例えば、「<div class="classA classB classC">」というものも許される。これは「classA」「classB」「classC」という3つのクラスが設定されているという意味に判別されるわけだ。

 この際に、「div.classA」と記述すると、この要素はマッチする。つまり完全合致ではなく、「そのクラスを含んでいるか」というマッチングだ。

3)特定の属性値で決める

 「要素名[属性名="値"]」と記述すると、ある属性が特定の値をもつ要素をマッチできる。例えば、「input [type="checkbox"]」とすると、type属性がcheckboxであるのもの――つまり、<input type="checkbox">と表現されるチェックボックス――とマッチする。

 また「="値"」の部分は省略でき、省略すると、その属性が値のいかんにかかわらず、存在する場合という意味になる。例えば「a[href]」は、href属性が存在するa要素――つまりリンク先が設定されているa要素――にマッチするのだ。

4)配下をたどる

 配下をたどるには、「要素名 > 要素名 > 要素名…」のように「>」でつなげる。例えば「div#postranking > div.rankingdata」は、次のような解釈だ。

a)id属性がpostrankingであるdiv要素の下で

b)class属性にrankingdataが設定されているdiv要素

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ