如何从动态html页面获取值?

时间:2013-07-11 15:45:31

标签: java dynamic-html

我有一个旧的Java程序,用于从html页面获取数据,几年前处理罚款,现在当我运行它时,没有数据。页面链接是:

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

我仍然可以看到html表来自我的Java程序,但是没有数据,但如果你使用浏览器进入该页面,你可以看到数据动态变化,为什么?

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

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

而不是数据,它显示&nbsp;

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

2 个答案:

答案 0 :(得分:2)

自从网站通过Javascript更新后,废弃当前的方法。您无法下载HTML并使其正常工作。

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

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

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

免责声明您需要确保您所做的工作符合您所使用的网站上的服务条款。否则你会遇到法律问题。

答案 1 :(得分:0)

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

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

还有其他一些这类Web浏览器,但我强烈推荐Casper,因为它快速且易于使用,甚至可以在Java脚本中调用,因为它只是Javascript。有关从java调用javascript的说明,请参阅this