HTMLのドキュメントから繰り返し部分をみつける - bits and bytesをベースにして、(ページによるけど)3回くらいクリックしたらSITEINFOが作れるAutoPagerize Iteration Detectorという長い名前のFirefox extensionを作りました。

ここがちょっと計算量が多くて数秒ブラウザが固まっちゃうんですが、しばらくすると今開いているページと、さっき右クリックした次のページへのリンクの先のページとを比較して、候補の一覧がリストアップされたウインドウが出てきます。
pageElementとして使われる実際のXPathです。そしてその右にあるthisPageとnextPageはそのXPathで今開いているページと次のページでそれぞれいくつの要素がマッチするかを示しています。この候補リストは、たぶん正しいと思われる順でならべられています。上にあるものほどpageElementのXPathとしてたぶん正しくて下にいくほど怪しくなってきます。
AutoPagerize Iteration Detectorではページの中にある繰り返しの単位にマッチするXPathを自動で作っているので、うまく生成できているものはthisPageとnextPageの値は、1ページに含まれている件数と同じになります。この店舗検索結果ページは1ページに10件表示するようになっているので、リストの一番上にあるものがpageElementを表すXPathとして正しそうです。
pageElementにマッチする要素のふちに水色の線がつくので、ほんとにあってるかどうかを目で確認することができます。これで2クリック。

nextLinkは、はじめに右クリックしたリンクから次のページと今のページとを比較しつつ自動的に生成してあります。今回のように次のページへのリンクがあればたいていはうまく機能するので、自動で入っているXPathそのままで大丈夫です。
nextLinkを割り出せません。割り出せないのですが3を右クリックして開くとnextLinkにはXPathが入っていますが、まず間違っているので、次のページへのリンクがないページではnextLinkは手とアタマを使って修正してあげてください。
URLにはSITEINFOを適用するページを正規表現で書きます。デフォルトでは今開いているページのURLが入っているのでてきとうに修正してあげる必要があります。今回はたまたま修正しなくていいのでこのまま。
できあがったらAppend this ruleを押してSITEINFOの生成は完了です。わずか3クリック!
で、作ったSITEINFOがうまく機能するか動作の確認をしてみましょう。

今回の店舗検索結果(住所・店名・条件から探す)のようにURLの編集もいらない例は珍しいですが、ページが素直なつくりになっているところであればだいたい30秒くらいでAutoPagerizeすることができます。

ウインドウの下側に作ったSITEINFO全部がinfogami書式で表示されるのでこれをコピーして使います。
生成されるSITEINFOには、SITEINFOを作ったときに使ったページのURLをsampleUrlとして含んでいるので、もし不都合なようだったら自分で削ってください。AutoPagerize0.0.19+Firefox3beta2とFirefox2.0.0.11で動作するのを確認してあります。
hr, text, br, b, tableでできているようなページでは繰り返し部分を見つけることができないので、pageElementの候補に正しいpageElementのXPathが出てきません。
また、ページの中に繰り返しの部分が存在しない(1回以下)場合もやはり繰り返し部分を見つけられないのでCNET Japanのように記事本文をいくつかのページに分割しているタイプのページではAutoPagerize Iteration Detectorは機能しません。
トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。
http://labs.gmo.jp/mt/mt-tb.cgi/188
comments