不懂得 XPath 請到: http://www.w3schools.com/xpath/
在開始前要先下載相關的 Library。
Dom4j: http://www.dom4j.org/dom4j-1.6.1/
NekoHTML: http://nekohtml.sourceforge.net/
在 Dom4j 使用 XPath 需要使用 jaxen,可以在 Dom4j 的 lib 目錄內找到。
而 NekoHTML 需要的 Xerces 亦可以在 NekoHTML 的 lib 目錄內找到。
我做了一個簡單的程式去讀取 Yahoo Finance 的股市資料:
package com.ctlok.pro;
import java.io.IOException;
import org.cyberneko.html.parsers.DOMParser;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.DOMReader;
import org.xml.sax.SAXException;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
try{
String url = "http://hk.finance.yahoo.com/q?s=0005.HK";
DOMParser parser = new DOMParser();
parser.parse(url);
org.w3c.dom.Document document = parser.getDocument();
DOMReader domReader = new DOMReader();
Document doc = domReader.read(document);
//Element name should be upper case
Node name = doc.selectSingleNode("//DIV[@id='quote-bar-latest']/*/H2/node()");
Node buy = doc.selectSingleNode("//DIV[@id='quote-bar-trade-info']/TABLE/TBODY/TR[1]/TD[2]");
Node sell = doc.selectSingleNode("//DIV[@id='quote-bar-trade-info']/TABLE/TBODY/TR[2]/TD[2]");
System.out.println(name.getText());
System.out.println("Buy: " + buy.getText().substring(2));
System.out.println("Sell: " + sell.getText().substring(2));
} catch (SAXException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
在 21 行的程式碼是向 URL 讀取 HTML 資料。
在 25 行的程式碼是將 W3C Document 轉換成 Dom4j Document。
28, 29, 30 行則是使用 XPath 去讀取指定元素,有一點要注意的是元素名稱是英文大寫。
而結果會是以下這樣:
匯豐控股有限公司
Buy: 77.700
Sell: 77.750
相關書籍: