HTML Parser

HTML Parser (Java)

概要

Vine Linux 3.1 を使用している場合は Firefox をインストールして、それを使ってダウンロードすること。

インストール

cd ~/java
unzip ~/Desktop/htmlparser1_6_20060610.zip
cd htmlparser1_6/lib
su
install -o root -g root -m 0444 -p *.jar /usr/java/*/jre/lib/ext/
exit

/usr/java 以下の複数の Java 開発環境/実行環境が入っている場合には、 上記ではうまくいかない。担当者に相談すること。

API 仕様は htmlparser1_6 の中の docs というディレクトリの中に入っている。 ブラウザで「ファイルを開く」で開き、ブックマークしておくとよい。

サンプルプログラム

class Parser の main メソッドを改変したもの。 想定と異なる文字コードを検出したときには、 その文字コードで解析し直すようにしている。

その改良例。a href と img src を抽出。

ポイント

フィルタによるノードの絞り込み方法

フィルタを駆使することで、かなり取り出すノードを絞り込むことができる。 パッケージ org.htmlparser.filters の説明には次の2つの例が示されている。

例: id属性を持つタグだけを取り出す

Parser parser = new Parser ("http://yadda");
parser.parse (new HasAttributeFilter ("id"));

例: リンク元が画像であるリンクのリストを作成する

NodeList list = new NodeList ();
NodeFilter filter =
    new AndFilter (
        new TagNameFilter ("A"),
        new HasChildFilter (
            new TagNameFilter ("IMG")));
for (NodeIterator e = parser.elements (); e.hasMoreNodes (); )
    e.nextNode ().collectInto (list, filter);

階層構造に現れない要素

HTML Parser では、P, B, I, FONT など、終了タグが忘れられがちな要素に対しては階層構造をつくらない方針をとっている。これらの要素を階層構造に組み入れる方法は、FAQに載っている。

その他のHTML Parser

Jericho HTML Parser のページに、他の HTML Parser との比較が載っている。