如何使用CSS选择器使用Nokogiri排除HTML p标记中的某些文本?

时间:2013-05-21 05:43:09

标签: html css ruby nokogiri

我正在处理遵循以下结构的HTML。我想忽略“RANDOM TEXT”并想用CSS选择器拉出“TEXT I WANT”。

我现在使用的选择器正在拉动所有文本:

variable = page.css('div.eight.columns.listingDetail p')

这是HTML:

<div class="eight columns listingDetail">
<p>
<span class="bold">RANDOM TEXT</span>
TEXT I WANT 1
</p>
<p>
<span class="bold">RANDOM TEXT</span>
<span class="bold price">
TEXT I WANT 2
<span></span>
</span>
</p>
<p>
<span class="bold">RANDOM TEXT</span>
</p>
<p>
<span class="bold">RANDOM TEXT</span>
TEXT I WANT 3
</p>
</div>

2 个答案:

答案 0 :(得分:0)

所以先获取p并在其中找到最后一个元素并获取其文本:

puts page.css('div.eight.columns.listingDetail p').first.children.last.text

在其中一个span元素中找到boldprice个类的p并获取文字:

puts page.css('div.eight.columns.listingDetail p span.bold.price').text

最后一个:

puts doc.css('div.eight.columns.listingDetail p').last.children.last.text

答案 1 :(得分:0)

这就是我要做的事情:

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<div class="eight columns listingDetail">
<p>
<span class="bold">RANDOM TEXT</span>
TEXT I WANT 1
</p>
<p>
<span class="bold">RANDOM TEXT</span>
<span class="bold price">
TEXT I WANT 2
<span></span>
</span>
</p>
<p>
<span class="bold">RANDOM TEXT</span>
</p>
<p>
<span class="bold">RANDOM TEXT</span>
TEXT I WANT 3
</p>
</div>
EOT

spans = doc.search('span.bold')
spans[0].next_sibling.text # => "\nTEXT I WANT 1\n"
spans[2].text              # => "\nTEXT I WANT 2\n\n"
spans[4].next_sibling.text # => "\nTEXT I WANT 3\n"

解析的想法是找到帮助您找到目标的地标,节点组合。最好有重复模式,以便快速搜索。在这种情况下,span class="bold"是找到所需文本所需的最小值,只有一个额外的必须忽略。

还有其他方法可以达到目的,但这样做很简单。