我已經解決了過去的這個問題。
對於價格歷史數據,我使用了雅虎的API。當我說API時,我的意思是我正在爲價格歷史數據的CSV文件發出HTTP請求。不幸的是,這隻能爲您提供一個公司的數據,在您指定的時間範圍內。所以我首先列出了所有股票代碼,然後迭代,爲每個代碼調用雅虎的API。您也許能夠找到一個也列出了股票代碼的網站,並且只是定期下載該列表。
這樣做太頻繁太快,他們的網站可能會阻止你。我添加了一些代碼來限制我發送http請求的頻率。我也堅持我的數據,所以我不必再次得到它。我會一直堅持原始/未經處理的數據形式,您的代碼可能會改變方式,使得使用其他任何東西都很困難。 Avro/Thrift可能是個例外,因爲那些支持模式演變。
對於其他類型的數據,您可能沒有任何API可以爲您提供良好的CSV文件。我不得不多次應付這個問題。這是我的建議。
有時一個網站在幕後調用一個寧靜的web服務,你可以通過使用螢火蟲發現。有時它還需要某些標題,您也可以使用螢火蟲發現它。
如果您被迫使用HTML,有幾個java庫可以幫助您。 apache.commons.http是一個庫,可以用來輕鬆地創建http請求並處理它們的響應。谷歌也有一個http客戶端的jar,這可能值得研究。
JSoup API在解析HTML數據方面非常出色,即使格式不正確,也不是XHTML。它也適用於XML。而不是遍歷或訪問jsoup層次結構中的節點,學習XPath並使用它來選擇你想要的。該網站可能會定期更改其網頁的格式,如果您使用的是JSoup,該網頁應該很容易處理和修復,而且難以應對。
如果您必須使用JSON,請使用Jackson庫來解析它。
如果您必須使用CSV,請使用OpenCSV庫分析並處理它。
此外,始終將數據存儲在原始數據中,並避免發出不必要的HTTP請求,以免被阻止。我被谷歌金融幾次封鎖,他們可以做到。幸運的是,該塊不會過期。您甚至可能希望在請求之間添加一個隨機等待期。
嘿謝謝斯蒂芬。相反,它的金融數據服務的API,就像我們可以使用API獲取Twitter Feeds一樣。我知道這會花費他們。我可以付一些費用。任何知名公司? – Kunal 2011-02-04 05:02:59
如果您想要的只是當前現貨(延遲10分鐘)並且只有歷史上的每日收盤價(沒有盤中數據),那麼您可以免費獲得。如果您需要實時價格和盤中交易數據記錄,那麼您可以從彭博或交易所自行購買。 – 2011-02-04 06:23:13