我正在尝试抓取一个页面并获取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 & 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>
我需要收集所有没有数据赞助者="赞助商"属性的标签。我尝试了如下方法,但它包括所有 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']) }