我正在尝试抓取一个页面并获取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 & 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&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']) }
答案 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']) }