如果只有一个字段为粗体,如何解析一行? Nokogiri和Ruby

所以我有这个代码收集我需要的所有产品信息:

# get main page page = agent.get "http://www.site.com.mx/tienda/index.php" search_form = page.forms.first search_result = agent.submit search_form doc = Nokogiri::HTML(search_result.body) rows = doc.css("table.articulos tr") i = 0 details = rows.collect do |row| detail = {} [ [:sku, 'td[3]/text()'], [:desc, 'td[4]/text()'], [:qty, 'td[5]/text()'], [:qty2, 'td[5]/p/b/text()'], [:price, 'td[6]/text()'] ].collect do |name, xpath| detail[name] = row.at_xpath(xpath).to_s.strip end i = i + 1 detail end 

如果qty2只存在,我需要像我的代码(在变量中)一样收集SKU。

修改行选择逻辑以仅获取所需的行。 更新 :这将获得数量单元格中具有粗体的行:

 rows = doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]') 

更新2

这是一个示例,表明这是有效的。

 require 'nokogiri' html = <<__html__  
1 2 sku1 4 5 6
2-1 2-2 sku2 2-4

2-5

2-6
__html__ doc = Nokogiri::HTML(html) doc.xpath('//table[@class="articulos"]/tr[td[5]/p/b]').each do |row| puts row.at_xpath('td[3]/text()') end

输出:

 sku2 

如果我的问题是正确的:

 rows.collect{...}.reject{|detail| detail[:qty2].empty?} 

要么

 rows.inject([]){ |details, row| ... ; detail[:qty2].empty? ? details : details.push(detail) }