Jsoup Извлечение того, чего нет в классе span

Справочные материалы

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>

Итак, чтобы резюмировать очень быстро, у меня есть 2 вопроса.

 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.

К сожалению, все это было то, что я делал это проще, Excel Sheet, но из-за этого я должен это делать. Любая помощь или указатели приветствуются. Простите за длинный пост.

for(int z = 0; 0 < tableHeaderEles.size(); z++) Не думайте, что вам нужно условие 0 < tableHeaderEles.size(), поскольку оно всегда будет истинным, если в списке что-то есть. Вы наверное имели ввиду z < tableHeaderEles.size()
takendarkk 28.11.2018 23:10

@csmckelvey Я устал и идиот, спасибо за ответ на вопрос 1

Beat. 28.11.2018 23:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
40
1

Ответы 1

Другой человек помог мне, и это способ добиться того, о чем я просил.

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

                                            }

Другие вопросы по теме