我有这样的代码:
<div id="left">
<div id="leftNav">
<div id="leftNavContainer">
<div id="refinements">
<h2>Department</h2>
<ul id="ref_2975312011">
<li>
<a href="#">
<span class="expand">Pet Supplies</span>
</a>
</li>
<li>
<strong>Dogs</strong>
</li>
<li>
<a>
<span class="refinementLink">Carriers & Travel Products</span>
<span class="narrowValue"> (5,570)</span>
</a>
</li>
(etc...)
我正在编写这样的代码:
html = file
data = Nokogiri::HTML(open(html))
categories = data.css('#ref_2975312011')
@categories_hash = {}
categories.css('li').drop(2).each do | categories |
categories_title = categories.css('.refinementLink').text
categories_count = categories.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
@categories_hash[:categories] ||= {}
@categories_hash[:categories]["Dogs"] ||= {}
@categories_hash[:categories]["Dogs"][categories_title] = categories_count
end
所以现在。我想做同样的事情,但没有使用#ref_2975312011
和“狗”。
所以我想我可以告诉Nokogiri以下内容:
废弃正确的
li
元素(从第三个元素开始) 在li元素下方,其中包含由链接和span标记包含的文本宠物用品。
有关如何实现这一目标的任何想法?
答案 0 :(得分:2)
宠物用品li
将是:
puts doc.at('li:has(a span[text()="Pet Supplies"])')
以下兄弟li
将是(跳过第一个):
puts doc.search('li:has(a span[text()="Pet Supplies"]) ~ li:gt(1)')