2009-08-17 75 views
1

我需要使用Java代碼從HTML頁面中獲取數據。 java部分是必需的。在html表中讀取到java

我試圖從中提取信息的頁面是http://www.weather.gov/data/obhistory/KMCI.html

我需要創建一個hashmaps列表......或某種數據對象,我可以在後面的代碼中引用。

這是我到目前爲止有:

URL weatherDataKC = new URL("http://www.weather.gov/data/obhistory/KMCI.html"); 
InputStream is = weatherDataKC.openStream(); 
int cnt = 0; 
StringBuffer buffer = new StringBuffer(); 

while ((cnt = is.read()) != -1){ 
    buffer.append((char) cnt); 
} 

System.out.print(buffer.toString()); 

任何建議,從哪裏開始?

回答

1

J2SE包含HTML解析功能,包裝爲javax.swing.text.htmljavax.swing.text.html.parserHTMLEditorKit.ParserCallback接收由DocumentParser推送的事件(最好通過ParserDelegator使用)。該框架與用於XML的SAX解析器非常相似。

當心,有一些錯誤。它將無法很好地處理錯誤的HTML。


處理colspan和rowspan是您的業務。

+0

謝謝,這看起來像一個好地方開始。而且,雖然Cyber​​Neko似乎很有趣,但我希望能留在我們已經使用的庫中。 – aintnoprophet 2009-08-18 14:44:55

3

有一個很好的HTML解析器叫貓:

NekoHTML是一個簡單的HTML掃描儀和標籤平衡器,它使應用程序員解析HTML文檔和訪問信息使用標準的XML接口。解析器可以掃描HTML文件並「修復」人類(和計算機)作者在編寫HTML文檔時所犯的許多常見錯誤。 NekoHTML添加缺少的父元素;用可選的結束標籤自動關閉元素;並可以處理不匹配的內嵌元素標記。

More information here

0

HTML抓取是非常困難的,除非你有很多「鉤子」像獨特的ID。例如,你想要的表即可啓動與此HTML:

<table cellspacing="3" cellpadding="2" border="0" width="670"> 

...這是非常通用的,可以匹配在頁面上幾個表。另一個問題是,如果HTML結構發生變化會發生什麼?您必須重新定義所有解析規則...

+0

優秀的一點,但它聽起來像是家庭作業,所以它稍後會改變並不重要。 ;] – CPerkins 2009-08-17 20:25:55