为什么Nokogiri给我重复的结果?

时间:2013-11-12 01:15:27

标签: ruby-on-rails web-scraping nokogiri

我正在使用Nokogiri从Craigslist中搜集数据。

本节应该从每一行中剔除价格,但是它会将每个价格两次降低,所以在我的删除数据中我得到:

@listings = [["item1", "price1"], ["item2", "price1"]]

@doc.css('.row').each do |row|
    if /\$[0-9]+/.match(row.text)
      @doc.css('.price').each do |price|
        debugger
          @listings[i] << price.text.delete('$')
          i += 1
          next
      end
    else
      @listings[i] << "n/a"
      i += 1
    end
  end   

1 个答案:

答案 0 :(得分:1)

@doc.css('.row').each do |row|
  ...
  @doc.css('.price').each do |price|

错了。每次代码循环row时,您都会在整个文档中返回第一次出现class="price"的代码。

相反它应该是这样的:

@doc.css('.row').each do |row|
  ...
  row.css('.price').each do |price|

此外,这是将节点聚合到容器中的错误方法:

@listings[i] << price.text.delete('$')
i += 1

相反,@listings应该定义为一个数组,然后按下它:

@listings << price.text.delete('$')

由于您没有显示初始化ilistings的位置,因此您必须弄清楚如何进行此工作。而且,就像你正在做的一些真正可疑的事情一样,至少在你给我们的不完整的代码示例中。