所以我编写了一个代码,用于从面包屑中删除当前类别的父级:
node_parent = @data.at_css(".bc a:nth-child(2)").text unless @data.at_css(".bc a:nth-child(2)").nil?
代码说:废弃第二个最后一个锚链接。这是HTML的结构:
<span class="bc">
<a href="">Home</a>
<span class="d">></span>
<img src="" />
<a href="/us/Apparel/1036682"">Apparel</a>
<div class="node"></div>
<a href="">...</a>
<span class="d">></span>
Baby
</span>
因此,在这种情况下,代码会废弃Apparel
问题是代码在这种情况下会失败:
<span class="bc">
<a href="">Home</a>
<span class="d">></span>
<img src="" />
Apparel
</span>
由于没有第二个最后一个锚链接。
对此有什么更好的解决方案?
网页的实例:
http://www.findbrowsenodes.com/us/Apparel/1036682 http://www.findbrowsenodes.com/us/Apparel/2402554011
答案 0 :(得分:1)
在回答你的问题之前,我采用了类似的例子 html ,如下所示: -
<span class="bc">
<a href="">Home</a>
<a href="">foo</a>
</span>
<span class="bc">
<a href="">Home</a>
</span>
<span class="bc">
<a href="">Home</a>
<a href="">bax</a>
<a href="">baz</a>
</span>
<强> Xpath的: - 强>
//span[@class='bc'][count(./a)>1]/a[count(following-sibling::a)=1]
<强>输出: - 强>
<a href="">Home</a>
<a href="">bax</a>
<强>引入nokogiri 强>
require 'nokogiri'
doc = Nokogiri::HTML::Document.parse <<-eotl
<span class="bc">
<a href="">Home</a>
<span class="d">></span>
<img src="" />
<a href="/us/Apparel/1036682">Apparel</a>
<div class="node"></div>
<a href="">...</a>
<span class="d">></span>
Baby
</span>
<span class="bc">
<a href="">Home</a>
<span class="d">></span>
<img src="" />
Apparel
</span>
eotl
doc.xpath("//span[@class='bc'][count(./a)>1]/a[count(following-sibling::a)=1]").map(&:text)
# => ["Apparel"]
答案 1 :(得分:0)
我愿意:
anchors = doc.css('a')
second_last_anchor = (anchors.length >= 2) ? anchors[-2] : anchors[0]
这基本上获取了doc中的所有链接。如果有2个或更多链接,则返回倒数第二个,即[-2]
索引。如果只有一个链接,它将返回一个。否则,如果没有链接,则返回nil。
doc
是整个html页面,但您可以使用您想要检查的任何特定节点。