Java - 使用 Jsoup 获取脚本标记中的文本

2022-09-01 18:09:53

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

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>

答案 1

或者,您可以使用 Element#html() 方法返回元素的内部 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

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

 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("-------------------");            
  }

推荐