1

私はこのようなコードを持っています:

<div id="left">
    <div id="leftNav">
      <div id="leftNavContainer">
        <div id="refinements">
          <h2>Department</h2>

          <ul id="ref_2975312011">
            <li>
              <a href="#">
                <span class="expand">Pet Supplies</span>
              </a>
            </li>

            <li>
              <strong>Dogs</strong>
            </li>

            <li>
              <a>
                <span class="refinementLink">Carriers &amp; Travel Products</span>
                <span class="narrowValue">&nbsp;(5,570)</span>
              </a>
            </li>


(etc...)

私はこのようにスクリプしています:

html       = file
data       = Nokogiri::HTML(open(html))
categories = data.css('#ref_2975312011')

@categories_hash = {}
categories.css('li').drop(2).each do | categories |
  categories_title = categories.css('.refinementLink').text
  categories_count = categories.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
  @categories_hash[:categories] ||= {}
  @categories_hash[:categories]["Dogs"] ||= {}
  @categories_hash[:categories]["Dogs"][categories_title] = categories_count
end 

だから今。同じことをしたいのですが#ref_2975312011、「犬」を使用しません。

だから、ノコギリに次のことを伝えられると思っていた。

liリンクと span タグで囲まれたテキスト Pet Supplies を持つ li 要素のすぐ下にある要素 (3 番目の要素から開始) を破棄します。

それを達成する方法のアイデアはありますか?

4

1 に答える 1

2

ペット用品liは次のとおりです。

puts doc.at('li:has(a span[text()="Pet Supplies"])')

次の兄弟は次liのようになります (最初のものをスキップします):

puts doc.search('li:has(a span[text()="Pet Supplies"]) ~ li:gt(1)')
于 2013-08-20T08:07:46.650 に答える