我有这个HTML:
<div class="pl-item-content clear" style="width: 176px; height: 385.875px;">
<div class="pricing-info-container">
<table cellspacing="0" class="product-prices">
<colgroup>
<col class="col-name"><col class="col-price">
</colgroup>
<tbody>
<tr>
<th class="col-name" scope="row">Prezzo a catalogo</th>
<td class="col-price">96,09 €</td>
</tr>
<tr>
<th class="col-name" scope="row">Prezzo</th>
<td class="col-price">63,00 €</td>
</tr>
<tr>
<th class="col-name" scope="row">Risparmio</th>
<td class="col-price col-saving">34,4%</td>
</tr>
<tr>
<th class="col-name" scope="row">Disponibilità</th>
<td class="col-price"><div class="stock-value"><span>16</span></div></td>
</tr>
</tbody>
</table>
</div>
</div>
我有很多pl-item-content
块,所以我需要迭代。
我需要查找价格和%
值:96,09
,63,00
,34,4
。
我使用Nokogiri来解析HTML文档并提取一些信息。我试过这个:
doc.css('div.pl-item-content').each do |item|
puts item.at_css(".pricing-info-container .product-prices td.col-price").text.strip
end
输出是这样的:
96,09 €
63,03 €
值不存在。我发现只有第一次出现,而不是所有出现。
在此之后,我需要找到%
值,但这是第二步。
解决方案是使用css
代替at_css
。
答案 0 :(得分:1)
如果将其更改为
,则有效doc.css('div.pl-item-content').each do |item|
puts item.css(".pricing-info-container .product-prices td.col-price").text.strip
end
关于nokogiri文件,它说:
- (Object) at_css(*rules)
Search this node for the first occurrence of CSS rules. Equivalent to css(rules).first See Node#css for more information.
答案 1 :(得分:0)
nokogiri的at_css只会返回与您的查询匹配的第一个元素。尝试类似的东西:
doc.search('div.pl-item-content').each do |table|
table.search('table > tr').each do |row|
puts row.at_css("td.col-price").text.strip
end
end
也许还需要一些调整......去吧。如果你不关心哪个表实际传递了数据,那么试试这个:
table.search('table > tr').each do |row|
puts row.at_css("td.col-price").text.strip
end
干杯