我正在处理遵循以下结构的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>
答案 0 :(得分:0)
所以先获取p
并在其中找到最后一个元素并获取其文本:
puts page.css('div.eight.columns.listingDetail p').first.children.last.text
在其中一个span
元素中找到bold
和price
个类的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"
是找到所需文本所需的最小值,只有一个额外的必须忽略。
还有其他方法可以达到目的,但这样做很简单。