2014-02-22 53 views
6

我试着从本网站抽取数据:http://www.bundesliga.de/de/liga/tabelle/获取的innerHTML通过Jsoup

在源代码中,我可以看到表,但没有内容,只是事情一样:

<td>[no content]</td> 
<td>[no content]</td> 
<td>[no content]</td> 
<td>[no content]</td> 
.... 

使用Firebug(F12在Firefox中)我不会看到任何内容,但我可以选择表格,然后通过Firebug选项复制innerHTML。在那种情况下,我得到了关于球队的所有信息,但我不知道如何在Jsoup中获得表格。

+0

说不定可以一接受那些确实帮助你解决问题的方法,或者尝试告诉我们你真正想知道的东西? – luksch

回答

2

该表格不是直接在服务器上呈现,而是由客户端JavaScript构建并使用通过AJAX获取到客户端的数据构建。因此,您期望用天真的Jsoup方法获得什么。

我看到了两个可能的解决方案:

  1. 您分析网络流量,并确定Ajax调用,该网站正在。然后你尝试重新构造格式并且激发与JavaScript相同的请求。然后你可以重建表格。
  2. 你不使用Jsoup,而是一个真正的浏览器,它加载页面并运行JavaScript,包括所有的AJAX调用。你可以使用Selenium webdriver。有一个名为phantomjs的无头浏览器,它具有相对较小的占位面积,可与硒鼓驱动器结合使用。

两个方案各有(DIS)的优点:

  1. 这需要更多的时间,因为你需要了解网络流量还不错。奖励将是一个非常快速和记忆效率的刮板。
  2. 硒的编程是非常容易的,你不应该有任何困难实现你的目标。您不需要了解您想要搜索的网站的内部运作情况。但是,价格是您项目的进一步依赖。内存消耗很高。另一个过程运行。刮擦会很慢。

也许你会发现足球桌的另一个来源,持有你想要的信息?这可能是最简单的。例如http://www.fussballdaten.de/bundesliga/

4

为了得到一个属性的值,使用Node.attr(String键)方法 对于文本的元素(和它结合儿童),使用Element.text() 对于HTML使用Element.html(),或Node.outerHtml()作为适当 例如:

String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; 
Document doc = Jsoup.parse(html); 
Element link = doc.select("a").first(); 

String text = doc.body().text(); // "An example link" 
String linkHref = link.attr("href"); // "http://example.com/" 
String linkText = link.text(); // "example"" 

String linkOuterH = link.outerHtml(); 
    // "<a href="http://example.com"><b>example</b></a>" 
String linkInnerH = link.html(); // "<b>example</b>" 

参考: http://jsoup.org/cookbook/extracting-data/attributes-text-html