如何解析包含Javascript的网页?

时间:2013-10-19 11:21:31

标签: java javascript html-parsing jsoup

我有一个使用Javascript创建表格的网页。现在我在我的Java项目中使用JSoup来解析网页。顺便说一句,JSoup无法运行Javascript,因此不会生成表格,并且网页的来源不完整。 如何包含该脚本创建的HTML代码,以便使用JSoup解析其内容?你能提供一个简单的例子吗?谢谢!

网页示例:

<!doctype html>
<html>
  <head>
    <title>A blank HTML5 page</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script>
        var table = document.createElement("table");
        var tr = document.createElement("tr");
        table.appendChild(tr);
        document.body.appendChild(table);
    </script>
    <p>First paragraph</p>
  </body>
</html>

输出应为:

<!DOCTYPE html>
<html>
    <head>
        <title>
            A blank HTML5 page
        </title>
        <meta charset="utf-8"></meta>
    </head>
    <body>
        <script>
            var table = document.createElement("table");
            var tr = document.createElement("tr");
            table.appendChild(tr);
            document.body.appendChild(table);   
        </script>
        <table>
            <tr></tr>
        </table>
        <p>
            First paragraph
        </p>
    </body>
</html>

顺便说一句,JSoup不包含表标记,因为它无法执行Javascript。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

第一种可能性

你在Jsoup之外有一些选择,即使用“真正的”浏览器并与之交互。一个很好的选择是selenium webdriver。使用selenium,您可以使用不同的浏览器作为后端,也许在您的情况下,非常轻量级的htmlUnit就可以了。如果调用更复杂的JavaScript,则通常没有其他选择来运行完整的浏览器。幸运的是,phantomjs就在那里,它的足迹并不太糟糕(无头和所有)。

第二种可能性

另一种方法可能是您使用JSoup获取javascript源并在Java中启动JavaScript解释器。为此,您可以使用Rhino。但是,如果你走那条路,你也可以直接使用HtmlUnit,这可能不那么笨重。