Java - 使用Jsoup在脚本标记内获取文本

时间:2013-05-27 21:03:45

标签: java parsing jsoup

我正在使用Jsoup库来读取URL。此网址包含几个<script>标记内的文字。我可以在每个<script>标签中获取文字吗?请注意,我并不是要求解析Javascript文件,因为我已经知道JSoup不允许这样做。 URL的实际源代码在脚本标记中包含文本,我需要它。

doc = Jsoup.connect("http://www.example.com").timeout(10000).get();

Element div = doc.select("script").first();
for (Element element : div.children()) {
System.out.println(element.toString());
}

这是源代码中的一个脚本标记:

<script type="text/javascript">
(function() {
...
})();
</script>

4 个答案:

答案 0 :(得分:24)

是。您可以使用Element#getElementsByTag()获取所有script代码。每个脚本标记都将由DataNode表示。

 Document doc =Jsoup.connect("http://stackoverflow.com/questions/16780517/java-obtain-text-within-script-tag-using-jsoup").timeout(10000).get();
 Elements scriptElements = doc.getElementsByTag("script");

 for (Element element :scriptElements ){                
        for (DataNode node : element.dataNodes()) {
            System.out.println(node.getWholeData());
        }
        System.out.println("-------------------");            
  }

答案 1 :(得分:22)

或者,您可以使用返回元素内部html的Element#html()方法。

自1.11.1以来使用高效Element#selectFirst()方法查找脚本元素。

Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Element scriptElement = doc.selectFirst("script");

// Don't forget to check scriptElement is not null...

String jsCode = scriptElement.html(); 

最多Jsoup 1.10.3 结合Element#select()Elements#first()来调查脚本元素。

Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Element scriptElement = doc.select("script").first();

// Don't forget to check scriptElement is not null...

String jsCode = scriptElement.html(); 

答案 2 :(得分:7)

Document doc = Jsoup.parse(html);
Elements scripts = doc.getElementsByTag("script");
for (Element script : scripts) {
    System.out.println(script.data());
}

答案 3 :(得分:0)

根据您的情况,解决方案如下。

Document doc = Jsoup.connect("http://www.example.com").timeout(10000).get();
Elements scripts = doc.select("script");

for (Element script : scripts) {
            String type = script.attr("type");
            if (type.contentEquals("text/javascript")) {
                String scriptData = script.data(); // your text from the script
                break
            }
}