我最近在Ruby上玩过Nokogiri,遇到一个问题,当我想将特定的项目放到控制台上时,它只能打印出空白。我试过将其他文本(例如产品名称)放到控制台,效果很好。因此,我对我在这里做错的事情感到茫然。
这是代码。
url = "https://www.ikea.com/us/en/search/?query=chair"
doc = Nokogiri::HTML(open(url))
doc.css('.prodHeader').each do |item|
price = item.css('span#txtPrice').text
puts price
end
这里是我正在引用的HTML块。
<span id="txtPriceProduct1" class="prodPrice" style="clear:both;">
$89.00
</span>
答案 0 :(得分:0)
ID为#txtPriceProduct1
的元素是.prodHeader
的同级元素,而不是子元素。您的代码仅搜索.prodHeader
的子代,这就是为什么找不到包含价格的元素的原因。
此代码显示所有价格(带空格):
doc.css('.prodHeader').each do |item|
price = item.next_element.text
puts price.strip
end
答案 1 :(得分:0)
您看到的是空行,因为没有匹配的节点span#txtPrice
,导致其返回空的NodeSet
,并调用text
并返回空字符串。
您可能要这样做:
doc.css('.prodHeader').each do |item|
puts "#{item.css('.prodName').text.strip} - #{item.css('+ span').text.strip}"
end
LÅNGFJÄLL - $149.00
IKEA PS LÖMSK - $69.99
LANGUR - $119.00
HATTEFJÄLL - $249.00
EKERÖ - $179.00
NORRARYD - $99.00
HATTEFJÄLL - $219.00
POÄNG - $79.00
HENRIKSDAL - $69.00
VÄNNÄS - $449.00
SJÄLLAND - $95.00
TULLSTA - $149.00
LÅNGFJÄLL - $179.00
BERNHARD - $169.00
POÄNG - $129.00
SJÄLLAND - $95.00
POÄNG - $129.00
INDUSTRIELL - $149.00
INDUSTRIELL - $89.00
LÅNGFJÄLL - $199.00
TULLSTA - $30.00
UTTRAN - $599.00
FJÄLLBERGET - $199.00
STRANDMON - $99.00
EKERÖ - $149.00
在上面,我们得到.prodHeader
并使用子选择器提取产品名称,并使用同级选择器使用+ span
提取价格