使用 rails 在 nokogiri 中迭代不起作用



所以我写了一些nokogiri代码,在测试.rb文件中工作,但当我把它放在rails应用程序模型中时,它不会迭代,只是返回第一个值。下面是正确迭代的代码:

require "rubygems"
require "open-uri"
require "nokogiri"
url = "http://www.ebay.com/sch/Cars-Trucks-/6001/i.html?_from=R40&_sac=1&_vxp=mtr&_nkw=car+projects&_ipg=200&rt=nc"
data = Nokogiri::HTML(open(url))
data.css(".li").each do |item|
  item_link = item.at_css(".vip")[:href]
  item_doc = Nokogiri::HTML(open(item_link))
  puts item_doc.at_css("#itemTitle").text.sub! 'Details about', ''
end
下面是rails应用程序中相同的代码,只返回它找到的第一个标题:
require "rubygems"
require "open-uri"
require "nokogiri"

class EbayScraper
  attr_accessor :url, :data
  def initialize(url)
    @url = url
  end
  def data
    @data ||= Nokogiri::HTML(open(@url))
  end
def titles
    data.css(".li").each do |item|
      item_link = item.at_css(".vip")[:href]
      item_data = Nokogiri::HTML(open(item_link))
      return item_data.at_css("#itemTitle").text.sub! 'Details about', ''
    end 
  end
ebay = EbayScraper.new("http://www.ebay.com/sch/Cars-Trucks-/6001/i.html?_from=R40&_sac=1&_vxp=mtr&_nkw=car+projects&_ipg=200&rt=nc")
titles = ebay.titles
puts titles

为什么第一个代码遍历整个东西,而第二组代码只返回第一个?

提前感谢您的时间!

因为在你的循环中有一个return语句退出了你的titles函数

相关内容

  • 没有找到相关文章

最新更新