【问题标题】:Get instance no of a tag in nokogiri在 nokogiri 中获取标签的实例编号
【发布时间】:2021-10-30 14:58:47
【问题描述】:
我想获得实例编号。一个标签,即 - 给定节点是否是给定标签的第一个、第二个或第三个等实例。
例如,如果我在一个节点上调用node.path,我会得到以下输出:
/html/head/base/link/body/div/br/form/hr/chapter[1]/section[1]/ul/li[1]/a
如何在section 旁边获得那个 1?
【问题讨论】:
标签:
ruby
web-scraping
nokogiri
【解决方案1】:
require 'nokogiri'
html_string=<<END
<html>
<body>
<div>
<span></span>
<span></span>
<span></span>
<span>
<h1></h1>
</span>
<span></span>
<span>
<strong></strong>
</span>
<span></span>
<span></span>
</div>
</body>
</html>
END
doc = Nokogiri::HTML(html_string)
h1 = doc.xpath("/html/body/div/span/h1")[0]
puts h1.path # output => /html/body/div/span[4]/h1
puts h1.parent.xpath("preceding-sibling::*").size + 1 # output => 4
strong = doc.xpath("/html/body/div/span/strong")[0]
puts strong.path # output => /html/body/div/span[6]/strong
puts strong.parent.xpath("preceding-sibling::*").size + 1 # output => 6