我正在使用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
答案 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('$')
由于您没有显示初始化i
或listings
的位置,因此您必须弄清楚如何进行此工作。而且,就像你正在做的一些真正可疑的事情一样,至少在你给我们的不完整的代码示例中。