1

我有一个旧的 Java 程序,它曾经从 html 页面获取数据,几年前运行良好,现在当我运行它时,没有数据。页面链接是:

http://www.batstrading.com/book/ibm/

我仍然可以看到从我的Java程序中获取的html表,但是没有数据,但是如果您使用浏览器访问该页面,您可以看到数据动态变化,为什么?

我现在使用 Java 程序从页面中获得的 html 文本就像您可以从浏览器的视图源中看到的文本,如下所示:

    <tbody>
      <tr>
        <td class="shares">&nbsp;</td>
        <td class="price">&nbsp;</td>
      </tr>

它显示的不是数据&nbsp;

如何修复我的代码以获取数据?我的意思是:Java程序没有问题,它就像浏览器的视图源一样获取文本,您看不到数据,因为页面现在是动态的,所以如何使用Java从一个动态页面是问题。

4

2 回答 2

2

废弃当前的方法,因为该站点是通过 Javascript 更新的。您将无法仅下载 HTML 并使其工作。

但是,一种更简单的方法(比使用 Selenium 或 JS 引擎)是简单地请求 Javascript 用于更新页面的源数据:

http://www.batstrading.com/json/bzx/book/IBM

这是完全有效的 JSON。请求与您的 HTTP 客户端的链接并使用 Jackson 解析 JSON。这将产生非常可靠的结果。

免责声明您需要确保您所做的事情符合您所使用网站上的服务条款。否则,您将面临法律问题。

于 2013-07-11T15:52:30.243 回答
0

你不能通过直接下载页面来做到这一点,你有两个选择。我个人会使用CasperjsSelenium与页面上的 javascript 进行交互。否则,您必须手动模拟 javascript 正在做什么,这通常不是很持久或可扩展的(阅读:一旦他们更改了有关其网站的任何内容,它就会中断)。

这些工具将模拟浏览器并让您等到某些元素加载。

还有许多其他类型的网络浏览器,但我强烈推荐 Casper,因为它快速且易于使用,甚至可以从您的 Java 脚本中调用,因为它只是 Javascript。有关从 java 调用 javascript 的说明,请参阅此内容。

于 2013-07-11T15:49:38.553 回答