【问题标题】:Java - Obtain text within script tag using JsoupJava - 使用 Jsoup 获取脚本标签内的文本
【发布时间】:2013-05-22 17:50:45
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: java parsing jsoup


    【解决方案1】:

    是的。您可以使用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("-------------------");            
      }
    

    【讨论】:

    • 谢谢@KenChan,它工作得很好,我正在使用String scriptdata = node.getWholeData(); 但是只在页面上获取第二个脚本?
    【解决方案2】:

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

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

    文档 doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); 元素 scriptElement = doc.selectFirst("script"); // 不要忘记检查 scriptElement 是否为空... String jsCode = scriptElement.html();

    直到 Jsoup 1.10.3结合 Element#select()Elements#first() 调用来查找脚本元素。

    文档 doc = Jsoup.connect("http://www.example.com").timeout(10000).get(); 元素 scriptElement = doc.select("script").first(); // 不要忘记检查 scriptElement 是否为空... String jsCode = scriptElement.html();

    【讨论】:

      【解决方案3】:
      Document doc = Jsoup.parse(html);
      Elements scripts = doc.getElementsByTag("script");
      for (Element script : scripts) {
          System.out.println(script.data());
      }
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
      【解决方案4】:

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

      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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多