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



我正在尝试抓取一个页面并获取dom元素,这是一个与Ruby和Nokogiri链接的集合。所以我有一个 li 的集合,它在某些 li 中具有特定的属性。我需要拒绝那些具有特定属性的 li;s 并获取这些 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>

我需要收集所有没有数据赞助者="赞助商"属性的标签。我尝试了如下方法,但它包括所有 lis。

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

css 的方法是:

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

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

可能是比 xpath 更好的选择。

你应该尝试:

# 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']) }

相关内容

  • 没有找到相关文章

最新更新