Sample

サンプルプログラム

指定された URL のページから、指定されたタグ名の要素の内容を抽出し表示するプログラム: TagGrep.java

ただし、同じ要素が入れ子になっている状況には対応していない。

import java.io.*;
import java.net.*;
import java.util.regex.*;

public class TagGrep {
    public static void main (String args[]) {
	try {
	    URL url = new URL(args[0]);
	    Webpage page = new Webpage(url);
	    page.setExpression(args[1]);
	    page.run();
	}
	catch(MalformedURLException e) {
	    System.err.println("Wrong URL: " + args[0]);
	}
    }
}

class Webpage {
    private URL url;
    private String expression;

    Webpage(URL url) {
	this.url = url;
	expression = null;
    }

    public void setExpression(String expression) {
	this.expression = expression;
    }
  
    public void run() {
	try {
	    URLConnection urlConnection = url.openConnection();
	    urlConnection.connect();
	    BufferedReader fin = new BufferedReader(
				    new InputStreamReader(
					  urlConnection.getInputStream(), "JISAutoDetect"));
	    // 全行を lines に読み込み
	    StringBuffer lines = new StringBuffer(4096);
	    String line;
	    while(fin != null) {
		line = fin.readLine();
		if (line == null)
		    break;
		//System.out.println(line);
		lines.append(line);
		lines.append('\n');
	    }
	    // expression タグの内容の抽出
	    Pattern elementPattern = Pattern.compile(
		     "<" + expression + ".*?>(.+?)</" + expression + ">",
		     Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    Matcher matcher = elementPattern.matcher(lines.toString());
	    while(matcher.find()) {
		String content = matcher.group(1);
		System.out.println(content);
	    }
	}
	catch(IOException e) {
	    System.err.println("I/O Error: " + e.toString());
	}
    }
}

TagGrep.java

取得するページの URL と、内容を抽出したいタグ名をコマンドライン引数で指定する。

$ javac TagGrep.java
$ java TagGrep http://www.sun.com/ title
...