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に使いかたは載っているけど、軽く説明。
サンプルソース
Element http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/Element.html
//Sourceオブジェクト生成時にアドレス、InputStream等を渡す。
Source html = new Source("http://pop1.info/");//XMLを相手にするなら下記を記述
//html.fullSequentialParse();//ページのタイトル名を取得する。
//pop1.info
ListtitleList = 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;
ListlinkList = 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からのデータ抽出で賄える。
また、XMLとは違い、属性は属性であり、要素ではないと割り切っているので、フレキシブルなXMLを
解析するときにも大変役に立つ。(むしろXMLの方で使うことが多い)