#java #android #jsoup
#java #Android #jsoup
Вопрос:
Я хочу получить информацию из первой таблицы внутри этой ссылки на сайт
Это тот код, который у меня есть
Document document = Jsoup.parse(DownloadPage("http://www.transtejo.pt/clientes/horarios"
"-ligacoes-fluviais/ligacao-barreiro-terreiro-do-paco/#dias-uteis"));
Elements table = document.select("table.easy-table-creator:nth-child(1) tbody");
Elements trAll = table.select("tr");
//For the Table Hour
Elements tr_first = table.select("tr:nth-child(1)");
Element tr = tr_first.get(1);
Elements td = tr.getElementsByTag("td");
for(int i = 0; i < td.size(); i ) {
Log.d("TIME TABLE:"," " td.get(i).text());
for(int i1 = 1; i1 < trAll.size(); i1 ) {
Elements td_inside = trAll.get(i1).getElementsByTag("td");
Log.d("TD INSIDE:"," " td_inside.get(i).text());
}
}
Прямо сейчас я могу получить информацию, проблема в том, что я получаю содержимое из других таблиц, потому что имя класса всех таблиц одинаковое, и у меня возникли проблемы с указанием нужной мне таблицы, а также я получаю исключение IndexOutOfBoundsException
Это журнал этой ссылки на журнал
Тип журнала, который я хочу, это что-то вроде этого: Час (ТАБЛИЦА ВРЕМЕНИ), а затем в этот час я хочу получить все итоговые строки с минутами (TD ВНУТРИ) за этот час, а затем перейти к следующему часу (…)
Спасибо за потраченное время.
[РЕДАКТИРОВАТЬ] Лучший пример журнала Проверьте первую таблицу.
TIME TABLE: 05H
TD INSIDE: 15
TD INSIDE: 45
TIME TABLE: 06H
TD INSIDE: 15
TD INSIDE: 35
TD INSIDE: 45
TD INSIDE: 55
TIME TABLE: 07H
TD INSIDE: 05
TD INSIDE: 15
TD INSIDE: 20
TD INSIDE: 25
TD INSIDE: 35
TD INSIDE: 40
TD INSIDE: 50
TD INSIDE: 55
(…)
Комментарии:
1. Привет, ты можешь четко записать ожидаемый журнал?
2. Привет, я отредактировал вопрос с типом журнала, который я ожидаю! Спасибо
Ответ №1:
Вы можете это сделать:
Element table = document
.select("table.easy-table-creator:nth-child(1) tbody").first();
Elements trAll = table.select("tr");
Elements trAllBody = table.select("tr:not(:first-child)");
// For the Table Hour
Element trFirst = trAll.first();
Elements tds = trFirst.select("td");
for(int i = 0; i < tds.size(); i ){
Element td = tds.get(i);
Log.d("TIME TABLE:", " " td.text());
String query = "td:nth-child(" (i 1) ")";
Elements subTds = trAllBody.select(query);
for (int j = 0; j < subTds.size(); j ) {
Element subTd = subTds.get(j);
String tdText = subTd.text();
if(!tdText.isEmpty()){
Log.d("TD INSIDE:", " " subTd.text());
}
}
}
Некоторые интересные моменты:
- ваш
table.easy-table-creator:nth-child(1) tbody
селектор выбирал все таблицы на странице; - с помощью прогрессивного выбора вы можете получить все
td
значения в заданном столбце:td:nth-child(index)
; trAllBody
здесь содержатся всеtr
файлы, которые не являются первыми (с использованиемtr:not(:first-child)
селектора).
Комментарии:
1. Большое спасибо!! очень разумно использовать tr: not(:first-child)