拒绝具有特定属性的li dom元素

时间:2015-01-12 07:50:08

标签: ruby nokogiri

我正在尝试抓取一个页面并获取dom元素,这是与Ruby和Nokogiri链接的集合。所以我有一些李的集合,在某些情况下具有特定的属性。我需要拒绝那些具有特定属性的li,并获取这些li的所有链接标记。

这是我的DOM看起来像。

 <ul>
   <li class="carousel-list-item">
      <a itemprop="url" data-cr="CharNav23" class="property-icon property-icon-14" href="/max-and-shred/">
         <div itemprop="name" class="property-tooltip">
            Max &amp; Shred
         </div>
      </a>
   </li>
   <li class="carousel-list-item">
      <a itemprop="url" data-cr="CharNav24" class="property-icon property-icon-19" href="/rabbids-invasion/">
         <div itemprop="name" class="property-tooltip">
            Rabbids Invasion
         </div>
      </a>
   </li>
   <li data-sponsor="Sponsor" class="carousel-list-item">
      <a itemprop="url" data-cr="CharNav21" class="property-icon property-icon-40" target="_blank" href="http://pubads.g.doubleclick.net/gampad/clk?id=47616903&amp;iu=8675">
         <div itemprop="name" class="property-tooltip">
            LEGO Friends
         </div>
      </a>
   </li>
   <li class="carousel-list-item">
      <a itemprop="url" data-cr="CharNav24" class="property-icon property-icon-19" href="/rubyds-investment/">
         <div itemprop="name" class="property-tooltip">
            Rabbids Invasion
         </div>
      </a>
   </li>
</ul>

我需要收集所有没有数据发起人的标签=&#34;赞助商&#34;属性。我尝试过如下,但它包括所有的lis。

page.search('ul.carousel-list > li > a').map{ |link| make_absolute(link['href']) }

2 个答案:

答案 0 :(得分:1)

这样做的方法是:

page.search('li:not([data-sponsor]) a')

page.search('li:not([data-sponsor=Sponsor]) a')

可能是比xpath更好的选择。

答案 1 :(得分:0)

你应该尝试:

# this will give you all ul elements which has no attribute named 'data-sponsor'.
page.search('//ul[@class="carousel-list"]/li[not(@data-sponsor)]/a').map{ |link| make_absolute(link['href']) }