如何解决仅当其中一个字段为粗体时才如何解析行? 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) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。