jericho HTML Parserを使う。

jericho HTML Parser http://jericho.htmlparser.net/docs/index.html
DownLoad http://sourceforge.net/projects/jerichohtml/files/
JavaDoc http://jericho.htmlparser.net/docs/javadoc/index.html

何といってもjerichoの魅力は不完全な汚いHTMLでも取り出すことが容易な所が好き。
DOMを理解しているなら、基本的にタグから欲しいデータを抽出するので直感的な操作性が魅力的。
もちろんXMLも解析できる。

JavaDocに使いかたは載っているけど、軽く説明。
サンプルソース


//Sourceオブジェクト生成時にアドレス、InputStream等を渡す。
Source html = new Source("http://pop1.info/");

//XMLを相手にするなら下記を記述
//html.fullSequentialParse();

//ページのタイトル名を取得する。
//pop1.info 
List titleList = html.getAllElements("titile"); //titleタグを全て抽出
if(titleList != null){
for(Element title: titleList){
System.out.println(title.getContent().toString());
}
}

//Link先とテキストコンテンツを取得したい場合

Map links = new HashMap
String url = null;
String text = null;
List linkList = html.getAllElement("a"); //a要素全て取得
if(linkList != null){
for(Element link: linkList){
url = link.getAttributeValue("href"); //a要素のhref属性値を取得
text = link.getTextExtractor().toString(); //html上のテキストとして表現される所を取得
if(url != null && text != null){
links.put(new URL(url), text);
}
//初期化
url = null;
text = null;
}
}

Element http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/Element.html
よほど繊細なデータでない限りは、Elementからのデータ抽出で賄える。
また、XMLとは違い、属性は属性であり、要素ではないと割り切っているので、フレキシブルなXML
解析するときにも大変役に立つ。(むしろXMLの方で使うことが多い)