Thu, June 28, 2007
HTMLのマークアップを除去する...HTML文書からテキストファイルを作成(Javaを使用)
HTMLのマークアップをJavaで除去する簡単な方法はないか、と調べてみると、 javax.swing.text.html.HTMLEditorKit.ParserCallback という 標準のJavaのクラスライブラリに含まれているクラスでできることが判明。
関連エントリー
XSLTを使えばもっと簡単に処理できることが判明。ただし、対象となるファイルは well-formed な XML,XHTML。
STEP1 HTMLEditorKit.ParserCallback を拡張したHTMLParser を書く
import javax.swing.text.html.HTMLEditorKit;
class HTMLParser extends HTMLEditorKit.ParserCallback{
private StringBuffer sb;
public HTMLParser(){
sb=new StringBuffer();
}
public String getHtml(){
return sb.toString();
}
public void handleText(char[] data, int pos) {
sb.append(new String(data));
sb.append(System.getProperty("line.separator"));
}
}
STEP2 HTMLParserを使ってマークアップを除去するStripMarkupクラス
import java.io.*;
import java.net.*;
import javax.swing.text.html.parser.ParserDelegator;
public class StripMarkup {
public static void main(String[] args) throws Exception{
if(args.length==1){
URL url=new URL(args[0]);
String enc="UTF-8";//url.openConnection().getContentEncoding();
InputStreamReader r=new InputStreamReader(url.openStream(),enc);
boolean ignoreCharSet=true;
HTMLParser hp=new HTMLParser();
ParserDelegator parser=new ParserDelegator();
parser.parse(r, hp, ignoreCharSet);
r.close();
System.out.println(hp.getHtml());
}
}
}
StripMarkupを起動するときにURLを指定する。
指定したURLの内容を(UTF-8でエンコードされていることが想定されているので、
それ以外の文字コードでエンコードされているページを処理しようと
すると文字化けします、たぶん)
$ javac HTMLParser.java StripMarkup.java
$ java StripMarkup http://osima.jp/