Web スクレイピングを用いたリアルタイム日経平均株価の取得

Tidy による整形式化および DOM に対して XPath を用いることで日経平均や為替の値を得る.

// Yahoo!ファイナンスのページをスクレイピングして,日経平均株価等を抽出する.
import java.io.*;
import java.net.URL;

import org.w3c.tidy.Tidy;
import org.w3c.dom.Document;
import javax.xml.xpath.*;

public class tidy {
    public static void main(String[] args){
	try {
	    //Yahoo!ファイナンスの URL
	    URL url = new URL("http://finance.yahoo.co.jp/");
	    
	    //Tidy の設定
	    // [参考] http://www.ibm.com/developerworks/jp/java/library/j-jtp03225/index.html?ca=drs-
	    Tidy tidy = new Tidy();
	    tidy.setShowWarnings(false);
	    tidy.setQuiet(true);
	
	    // Tidy を利用して DOM document を取得
	    Document doc = tidy.parseDOM(url.openStream(), null);

	    //////////////////////////////////////////////////

	    // XPath用のファクトリ生成
	    XPathFactory xpf = XPathFactory.newInstance();

	    // XPathオブジェクトの生成
	    XPath xpath = xpf.newXPath();

	    // XPath 表現:日経平均株価
	    String expressionNikkei = "//div[@class='ymuiContainer ymuiBodyBorder yjSt']/div[@class='lineFi2 marB4']/div[@class='header'][@id='one-header']/dl[@class='pad4 clearfix']/dd[@class='ymuiEditLink mar0']/strong";

	    // XPath 表現:NYダウ
	    String expressionNYDow = "//div[@class='ymuiContainer ymuiBodyBorder yjSt']/div[@class='lineFi2 marB4']/div[@class='header'][@id='two-header']/dl[@class='pad4 clearfix']/dd[@class='ymuiEditLink mar0']/strong";

	    // XPath 表現:米ドル/円
	    String expressionYenDoll = "//div[@class='ymuiContainer ymuiBodyBorder yjSt']/div[@class='lineFi2 marB4']/div[@class='header'][@id='five-header']/dl[@class='pad4 clearfix']/dd[@class='ymuiEditLink mar0']/strong";

	    // XPath 表現:ユーロ/円
	    String expressionYenEuro = "//div[@class='ymuiContainer ymuiBodyBorder yjSt']/div[@class='lineFi2 marB4']/div[@class='header'][@id='six-header']/dl[@class='pad4 clearfix']/dd[@class='ymuiEditLink mar0']/strong";

	    // XPath 表現を評価して日経平均の値を得る
	    String nikkei = (String) xpath.evaluate(expressionNikkei,
						doc,
						XPathConstants.STRING);
	    System.out.println(nikkei);

	    // XPath 表現を評価して NY ダウの値を得る
	    String nydau = (String) xpath.evaluate(expressionNYDow,
						doc,
						XPathConstants.STRING);
	    System.out.println(nydau);

	    // XPath 表現を評価してドル/円の値を得る
	    String doll = (String) xpath.evaluate(expressionYenDoll,
						doc,
						XPathConstants.STRING);
	    System.out.println(doll);

	    // XPath 表現を評価してユーロ/円の値を得る
	    String euro = (String) xpath.evaluate(expressionYenEuro,
						doc,
						XPathConstants.STRING);
	    System.out.println(euro);
	} catch(Exception e){
	    e.printStackTrace();
	}
    }
}