如何使用Jsoup从嵌套span获取文本?

时间:2017-11-22 12:49:11

标签: java html jsoup

我正在尝试获取范围

中的文字

enter image description here

使用以下代码。但是,输出的行为就好像嵌套的跨度不存在一样

            Elements tags = document.select("div[id=tags]"); 

            for (Element tag:tags){


                Elements child_tags = tag.getElementsByTag("class");  

                String key = tag.html();
                System.out.println(key); //only as a test

                for (Element child_tag:child_tags){
                    System.out.println("\t" + child_tag.text());

                }

我的输出是

      <hr />Tags: 
      <span id="category"></span> 
      <span id="voteSelector" class="initially_hidden"> <br /> </span>      

2 个答案:

答案 0 :(得分:1)

Elements child_tags = tag.getElementsByTag("class");

使用此行,您将尝试获取具有标记类的元素,即<class>...</class>,该元素不存在。将该行更改为:

Elements child_tags = tag.getElementsByClass("tag");

通过class = tag的属性值获取元素或者:

Elements child_tags = tag.getElementsByTag("span"); 

按标签名称= span。

获取元素

答案 1 :(得分:1)

假设您正在https://chesstempo.com/chess-problems/15上尝试代码,并且您想要的数据显示在下面的图片中enter image description here

现在,使用Jsoup,您将获得在浏览器中呈现为源代码的数据,以确认您可以在浏览器中按Uncaught Error: The edge events feature is not compatible with the WebGL renderer ,这将打开一个新窗口,其中Jsoup将获得实际内容将显示。现在回答您的问题,您尝试检索的部分不会出现在浏览器源代码中,请按CTRL+U进行检查。

如果使用JAVASCRIPT呈现内容,则JSOUP将无法看到这些内容,因此您必须使用其他可运行javascript的内容并为您提供详细信息。

JSoup不运行Javascript,也不是浏览器。

修改

使用 SELENIUM 有一个好转。下面是工作代码,用于获取网址的确切源代码以及您要查找的所需数据:

CTRL+U

您需要能够模拟浏览器行为的selenium web driver Selenium Web Driver,并允许您呈现脚本编写的html内容。