xpath выделение текста после определенного элемента или между элементами - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь использовать xpath для выделения всего текста внутри элементов:

  1. между элементами h3 "Hay Point" и "Darymple Bay"
  2. после элемента h3 "Darymlple Bay"

У меня работает этот синтаксис xpath, который выделяет весь текст в тегах td после <h3>Dalrymple Bay Coal Terminal</h3>.

.//h3[2]/following::td/text()

Но мне трудно понять, как выделить весь текст между тегами, которые попадают между <h3>Hay Point Coal Terminal</h3> и <h3>Dalrymple Bay Coal Terminal</h3>

Пример структуры html ниже:

<h3>Hay Point Coal Terminal</h3>
<tr role="row" class="odd"><td headers="table06762r1c1" tabindex="0">July       
</td><td style="text-align: left;" 
headers="table06762r1c2">4,517,445</td>
<td headers="table06762r1c3">4,261,253</td>
<td headers="table06762r1c4">4,057,239</td>
<td headers="table06762r1c5">3,535,507</td>
</tr>

<h3>Dalrymple Bay Coal Terminal</h3>
<tr><td headers="table06762r1c1">July</td><td style="text-align: left;" 
headers="table06762r1c2">5,462,591</td>
<td headers="table06762r1c3">5,625,700</td>
<td headers="table06762r1c4">5,816,977</td>
<td headers="table06762r1c5">5,396,644</td>
</tr>

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Предполагая, что вы хотите сгруппировать их, вы сделаете что-то вроде:

for h3 in response.css('h3'):
  item = {
    "h3": h3.css('*::text').extract()[0],
    "tds": h3.css('* + tr td::text').extract()
  }
0 голосов
/ 26 февраля 2020

Если я правильно понял ваш вопрос и получил html в вопросе, чтобы получить текстовые узлы, связанные с узлом <h3>Hay Point Coal Terminal</h3>, попробуйте:

//h3[1]/following-sibling::tr[1]/td/text()

Вывод:

July     
4,517,445
4,261,253
4,057,239
3,535,50

Чтобы получить те, которые связаны с узлом <h3>Dalrymple Bay Coal Terminal</h3>, используйте:

//h3[2]/following-sibling::tr[1]/td/text()

или просто

//h3[2]/following-sibling::tr/td/text()

Выход:

July
5,462,591
5,625,700
5,816,977
5,396,644

Кому получите оба:

//h3/following-sibling::tr/td/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...