「HTMLからリンクを抽出する」

HTMLからリンクを抽出する処理を書く必要があったので、そこで書いたコードを
サンプルとしてちょっと公開。(実際に書いたコードとは若干違いますが)
ここでは、はてなブックマーク人気エントリーからリンクを抽出するようにしています。
HTMLの取得から解析までhtmlparserのライブラリがやってくれるので、非常に
使い勝手がいいです。java.netパッケージや正規表現を使用しても同じことは
出来ますが、それなりに面倒ですから。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.SimpleNodeIterator;

public class HatenaBookmarkParser
{
  private List searchList = new ArrayList();

  /**
   * @param args
   */
  public static void main(String[] args)
  {
    HatenaBookmarkParser parser = new HatenaBookmarkParser();
    parser.parse();
    List list = parser.getResultList();
    for (Iterator iter = list.iterator(); iter.hasNext();)
    {
      Map element = (Map) iter.next();
      System.out.println(element);
    }
  }

  public void parse()
  {
    try
    {
      TagNameFilter anchorFilter = new TagNameFilter("A");
      HasAttributeFilter attrFilter = new HasAttributeFilter("class",
          "bookmark");
      AndFilter filter = new AndFilter(anchorFilter, attrFilter);

      Parser parser = new Parser("http://b.hatena.ne.jp/hotentry");
      NodeList list = parser.parse(filter);

      SimpleNodeIterator it = list.elements();
      while (it.hasMoreNodes())
      {
        Node node = it.nextNode();
        LinkTag tag = (LinkTag) node;
        String url = tag.extractLink();

        Map map = new HashMap();
        map.put("URL", url);
        map.put("TEXT", tag.getLinkText());
        searchList.add(map);
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public List getResultList()
  {
    return searchList;
  }
}

このコードを実行すると、以下のような結果を出力します。
#一部だけ抜粋。

{URL=http://2xup.org/log/2006/04/28-2323, TEXT=Photoshop で背景透過の美しい favicon を作成する - 2xup}
{URL=http://www.atmarkit.co.jp/fwcr/rensai/ajax_php02/01.html, TEXT=Ajaxを使ったファイルマネージャをPHPで作ろう - @IT}