MY-NOTEBOOK

Thursday, June 28, 2007

HTMLのマークアップを除去する...HTML文書からテキストファイルを作成(Javaを使用)

HTMLのマークアップをJavaで除去する簡単な方法はないか、と調べてみると、javax.swing.text.html.HTMLEditorKit.ParserCallback という標準のJavaのクラスライブラリに含まれているクラスでできることが判明。

関連エントリー XSLTを使えばもっと簡単に処理できることが判明。ただし、対象となるファイルは well-formed な XML,XHTML。 XMLのマークアップを除去する...XML文書からテキストファイルを作成

STEP1 HTMLEditorKit.ParserCallback を拡張したHTMLParser を書く

HTMLParser.java

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クラス

[StripMarkup.java":src/StripMarkup.java


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/
© 2006-2012 Tomoaki Oshima