Разбор первого значения <td> в первом и последнем <tr> таблицы <table> с помощью JSoup

0

Я смог успешно использовать JSoup для синтаксического анализа всей страницы, однако я столкнулся с некоторой проблемой для анализа первого <td> и в первом и последнем <tr> таблицы. Особенно видно, как количество строк таблицы изменяется в течение всей продолжительности дня.

До сих пор я понимаю, что мне нужно получить таблицу на странице, поэтому я использую этот doc.select("table.tabular zebra").toString(); (хотя я не знаю, как иметь дело с пространством в классе таблицы, но это отдельная проблема).

Ниже приведен пример таблицы:

<table id="tradesTableE_PPT_L0" class="tabular zebra" style="float:left; margin-right:10px">
<caption>Latest trades</caption>

<thead>
    <tr>
      <th id="tradeTime" title="The time the trade was published">Time</th>
      <th id="tradePrice" title="The trade price">Price</th>
      <th id="tradeVolume" title="Number of shares traded">Volume</th>
      <th id="tradeTotalPrice" title="Total value of bargain">Value</th>
      <th id="bidPrice" title="Best bid at time of trade">Bid</th>
      <th id="askPrice" title="Best ask at time of trade">Ask</th>
      <th id="tradeType" title="Buy/Sell indicator"><a href="#types" style="color=#0000CC">B/S</a></th>
    </tr>
</thead>

<tbody>
  <tr align="right">
  <th>16:22:40</th>
    <td>204p</td>
    <td>2,500</td>
    <td>&pound;5,100</td>
    <td>192.5p</td>
    <td>192.5p</td>
    <td align="center" style='color:blue;'>Buy</td>
  </tr>
  <tr align="right">
  <th>16:05:23</th>
    <td>200p</td>
    <td>2,500</td>
    <td>&pound;5,000</td>
    <td>192.5p</td>
    <td>192.5p</td>
    <td align="center" style='color:blue;'>Buy</td>
  </tr>
  <tr align="right">
  <th>15:59:51</th>
    <td>197p</td>
    <td>1,000</td>
    <td>&pound;1,970</td>
    <td>192.5p</td>
    <td>192.5p</td>
    <td align="center" style='color:blue;'>Buy</td>
  </tr>
</tbody>
</table>
  • 1
    Элемент с двумя классами может быть выбран либо с одним, либо, если оба требуются, то table.tabular.zebra - это то, что вы будете использовать. В именах классов нет пробелов, элемент может иметь более одного класса, разделенных пробелами.
  • 0
    Так что Tabular Zebra на самом деле два класса. Не один с пробелом?
Показать ещё 4 комментария
Теги:
jsoup

2 ответа

0
Лучший ответ

Я получил ответ:

Для первой строки:

doc.select("[id^=tradesTableE_]").select("tr").get(1).select("td").get(0).text().toString();

и для последней строки:

doc.select("[id^=tradesTableE_]").select("tr").last().select("td").get(0).text().toString();
0

Доступ к элементам таблицы может стать очень грязным. Раньше мне приходилось использовать селен для проверки значений в таблице. Я обнаружил, что синтаксический анализ всей таблицы HTML в объект, поддерживающий разработчика, помог мне существенно упростить код. Без этого в коде было много беспорядочных селекторов xpath, из-за которых было трудно читать/поддерживать.

например:

TableWithHeaders table = MyHtmlUtils.parseTableWithHeaders(dom, "//[id=tradesTableE_PPT_L0]");
assertEquals(3, table.getRowCount());
assertEquals("204p", table.getCellText("Price", 0));
assertEquals("1,000", table.getCellText("Volume", 2));

public interface TableWithHeaders {
   int getRowCount();
   Collection<String> getHeaderNames();
   String getCellText(String header, int row);
   Element getCell(String header, int row);
   ...
}
  • 0
    Какова цель утверждений?
  • 0
    Просто показываю, как работает API

Ещё вопросы

Сообщество Overcoder
Наверх
Меню