仅当其中一个字段为粗体时才如何解析行? 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__
<html>
<table class=\"articulos\">
<tr>
  <td>1</td>
  <td>2</td>
  <td>sku1</td>
  <td>4</td>
  <td>5</td>
  <td>6</td>
</tr>
<tr>
  <td>2-1</td>
  <td>2-2</td>
  <td>sku2</td>
  <td>2-4</td>
  <td><p><b>2-5</b></p></td>
  <td>2-6</td>
</tr>
</table>
</html>
__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) }
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...