-2

我正在处理遵循以下结构的 HTML。我想忽略“随机文本”并想用 CSS 选择器拉出“我想要的文本”。

我现在使用的选择器正在提取所有文本:

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>
4

2 回答 2

0

因此,首先获取p并在其中找到最后一个元素并获取其文本:

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

并在其中一个元素中找到spanwithboldpriceclassesp并获取文本:

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

最后一个:

puts doc.css('div.eight.columns.listingDetail p').last.children.last.text
于 2013-05-21T06:21:17.820 回答
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"是定位所需文本所需的最小值,只有一个额外的需要忽略。

还有其他方法可以到达那里,但这使它变得简单。

于 2013-05-21T06:34:06.010 回答