-2

以下の構造に従うHTMLを扱っています。「RANDOM TEXT」を無視して「TEXT I WANT」を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

そして、要素の 1 つの内部spanで withboldpriceclass を検索し、テキストを取得します。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
于 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"目的のテキストを見つけるために必要な最小値は 1 つだけで、無視する必要がある余分なものが 1 つだけありました。

そこに到達する方法は他にもありますが、これは簡単です。

于 2013-05-21T06:34:06.010 に答える