通过Jsoup获取innerHTML

unr*_*ted 7 html web-scraping jsoup

我试图从这个网站上抓取数据:http://www.bundesliga.de/de/liga/tabelle/

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

<td>[no content]</td>
<td>[no content]</td>
<td>[no content]</td>
<td>[no content]</td>
....
Run Code Online (Sandbox Code Playgroud)

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

Ade*_*del 6

要获取属性的值,请使用Node.attr(String key)方法对于元素(及其组合子元素)上的文本,请使用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>"
Run Code Online (Sandbox Code Playgroud)

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


luk*_*sch 2

该表不会直接在服务器上呈现,而是由页面的客户端 JavaScript 构建,并使用通过 AJAX 到达客户端的数据构建。因此,使用简单的 Jsoup 方法所得到的结果是预期的。

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

  1. 您分析网络流量并识别站点正在进行的 ajax 调用。然后,您尝试重建格式并触发与 JavaScript 相同的请求。然后您可以重建该表。
  2. 您不使用 Jsoup,而是使用真正的浏览器,它加载页面并运行 JavaScript,包括所有 AJAX 调用。您可以使用Selenium webdriver来实现这一点。有一个名为phantomjs的无头浏览器,它的占用空间相对较小,您可以将其与 selenium webdriver 结合使用。

两种选择都有其(缺点)优点:

  1. 这需要更多时间,因为您需要很好地了解网络流量。奖励将是一个非常快速且内存高效的抓取器。
  2. Selenium 的编程非常简单,实现您的目标应该不会有任何困难。您无需了解要抓取的网站的内部运作方式。然而,价格是您的项目的进一步依赖。内存消耗高。另一个进程运行。刮擦会很慢。

也许您在足球表中找到了另一个包含您想要的信息的来源?这可能是最简单的。例如http://www.fussballdaten.de/bundesliga/