指定された 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());
}
}
}
取得するページの URL と、内容を抽出したいタグ名をコマンドライン引数で指定する。
$ javac TagGrep.java $ java TagGrep http://www.sun.com/ title ...