我之前处理过这个问题。
对于价格历史数据,我使用了雅虎的API。当我说API时,我是指通过HTTP请求获取价格历史数据的CSV文件。不幸的是,这只能让你获得一个公司在你指定的时间范围内的数据。所以我首先列出了所有股票代码,并对其进行了迭代,为每一个调用雅虎的API。你也可以找到一个列出股票代码的网站,并定期下载该列表。
如果你这样做得太频繁且太快,他们的网站可能会屏蔽你。我添加了一些代码来限制我的HTTP请求频率。我还持久化了我的数据,这样我就不必再次获取它。我总是持久化原始/未经处理的数据,因为你的代码可能会发生改变,使得难以使用其他形式的数据。除了Avro/Thrift可能是个例外,因为它们支持模式演化。
对于其他类型的数据,你可能没有任何可以提供漂亮CSV文件的API。我多次面对这个问题。以下是我的建议。
有时候一个网站在后台调用RESTful web服务,你可以通过使用Firebug来发现这一点。有时它也需要特定的标头,你也可以使用Firebug来发现它们。
如果你被迫使用HTML,有几个Java库可以帮助你。apache.commons.http是一个库,可以轻松地进行HTTP请求并处理其响应。Google也有一个http-client jar,值得研究一下。
JSoup API在解析HTML数据方面非常出色,即使格式不正确,也不是XHTML。它也适用于XML。与遍历或访问JSoup层次结构中的节点不同,学习XPath并使用它来选择所需内容。如果网站定期更改其网页格式,则使用JSoup应该很容易应对和修复,否则会很困难。
如果你必须使用JSON,请使用Jackson库来解析它。
如果你必须使用CSV,请使用OpenCSV库来解析和处理它。
此外,始终将数据存储为原始数据,并避免进行不必要的HTTP请求,以便避免被阻止。我曾经被Google Finance封锁过几次,他们确实可以这样做。幸运的是,阻塞会过期。你甚至可能想在请求之间添加随机等待时间。