如何使用Nokogiri在span标签之间打印文本?

时间:2018-08-10 05:04:19

标签: html css ruby-on-rails ruby nokogiri

我最近在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>

2 个答案:

答案 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提取价格