Подтвердить что ты не робот

Как получить текст node без детей?

Я использую Nokogiri для разбора html-страницы с тем же контентом:

<p class="parent">
  Useful text
  <br>
  <span class="child">Useless text</span>
</p>

Когда я вызываю метод page.css('p.parent').text Nokogiri возвращает "Полезный текст" Бесполезный текст ". Но мне нужен только "Полезный текст".

Как получить текст node без детей?

4b9b3361

Ответ 1

XPath включает в себя тест text() node для выбора текстовых узлов, поэтому вы можете сделать:

page.xpath('//p[@class="parent"]/text()')

Использование XPath для выбора классов HTML может стать довольно сложным, если рассматриваемый элемент может принадлежать более чем одному классу, поэтому это может быть не идеальным.

К счастью, Nokogiri добавляет селектор text() в CSS, поэтому вы можете использовать:

page.css('p.parent > text()')

чтобы получить текстовые узлы, являющиеся прямыми дочерними элементами p.parent. Это также вернет некоторые узлы, которые являются только whtespace, поэтому вам может потребоваться отфильтровать их.

Ответ 2

Вы можете использовать page.css('p.parent').children.remove.

Затем ваш page.css('p.parent').text вернет текст без дочерних узлов.

Примечание: page будет изменен с помощью remove