Jsoup提取span类中没有的内容

时间:2018-11-28 22:07:02

标签: java html jsoup extraction

参考资料

http://www.tptp.org/CASC/J9/WWWFiles/Results.html

所以我正在使用Jsoup从网页中提取数据。但是,我遇到了一个小问题。我收到一个看起来像这样的错误:

406 81%
401 80%
355 71%
209 41%
163 81%
162 81%
157 78%
92 46%Exception in thread "main" 
461 92%
454 90%
362 72%
350 70%
298 59%
256 51%
247 49%
143 28%
133 26%
126 25%
123 24%
122 24%
73 14%
50 10%
java.lang.IndexOutOfBoundsException: Index: 22, Size: 22
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at org.jsoup.select.Elements.get(Elements.java:544)
    at test.Etest.main(Etest.java:44)

这很奇怪,因为在我从未做过此错误之前就做了类似的事情。这是我编写的代码。

Document doc = Jsoup.connect(html).get();
Elements tableElements = doc.select("table");
//get the other tables maybe?
Elements tableHeaderEles = tableElements.select("tr:contains(Solutions) > td");
            for(int z = 0; 0 < tableHeaderEles.size(); z++) {
                System.out.println(tableHeaderEles.get(z).text());
            }

我唯一感兴趣的行是“解决方案”行,而不是“解决方案”列,我想留下百分比。我从这个for循环开始只是为了让它继续。我也只需要前六个表,但是以后我可以自己解决这个问题。因此,从这条线和类似的线中,我只想要406。

<td align="RIGHT" bgcolor="WHITE">406<span class="xxsmallfont">&nbsp;81%</span>

因此,为了快速总结一下,我有两个问题。

 1. How am I getting this error,especially that weird exception? Its 
extracting fine at the beginning, is it not going to the other tables?
 2. How do I get just the 406? text() will take the percentage with it
 and its outside of the span so thats not an option.

所有这一切的不幸之处在于,我这样做比较容易,但是由于这个原因,我必须这样做。任何帮助或指针表示赞赏。抱歉,很长的帖子。

1 个答案:

答案 0 :(得分:0)

另一个人帮助了我,这就是实现我所要求的方法。

for(int z = 0; z < Solutions.size(); z++) {
                a = Solutions.get(z).text();
                b = Solutions.get(z).select("span").text();
                result = a.replace(b, " ");
                System.out.println(result);

                                            }