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

Mat*_*ins 21 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());
}
Run Code Online (Sandbox Code Playgroud)

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

<script type="text/javascript">
(function() {
...
})();
</script>
Run Code Online (Sandbox Code Playgroud)

Ken*_*han 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("-------------------");            
  }
Run Code Online (Sandbox Code Playgroud)


Ste*_*han 23

或者,您可以使用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(); 


Moj*_*bye 7

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

  • 虽然此代码可能会回答这个问题,但提供有关_why_和/或_how_的其他背景信息可以回答这个问题,从而显着提高其长期价值.请[编辑]你的答案添加一些解释. (2认同)