【发布时间】:2015-02-13 22:41:58
【问题描述】:
所以我的索引操作中有这段代码,很想把它移到模型中,只是对如何做有点困惑。
原码
def index
urls = %w[http://cltampa.com/blogs/potlikker http://cltampa.com/blogs/artbreaker http://cltampa.com/blogs/politicalanimals http://cltampa.com/blogs/earbuds http://cltampa.com/blogs/dailyloaf http://cltampa.com/blogs/bedpost]
@final_images = []
@final_urls = []
urls.each do |url|
blog = Nokogiri::HTML(open(url))
images = blog.xpath('//*[@class="postBody"]/div[1]//img/@src')
images.each do |image|
@final_images << image
end
story_path = blog.xpath('//*[@class="postTitle"]/a/@href')
story_path.each do |path|
@final_urls << path
end
end
end
我在我的模型中测试了这段代码,它适用于一个 url,只是不确定如何像原始代码一样集成所有 url。
新代码
型号
class Photocloud < ActiveRecord::Base
attr_reader :url, :data
def initialize(url)
@url = url
end
def data
@data ||= Nokogiri::HTML(open(url))
end
def get_elements(path)
data.xpath(path)
end
end
控制器
def index
@scraper = Photocloud.new('http://cltampa.com/blogs/artbreaker')
@photos = @scraper.get_elements('//*[@class="postBody"]/div[1]//img/@src')
@story_urls = @scraper.get_elements('//*[@class="postBody"]/div[1]//img/@src')
end
我的主要问题是如何初始化多个 url 并像我的原始代码一样循环它们。我尝试过不同的事情,但感觉就像碰壁了。我需要将它们保存到数据库中,但想先让它工作。非常感谢任何帮助。
更新的控制器 - WIP
def index
start_urls = %w[http://cltampa.com/blogs/potlikker
http://cltampa.com/blogs/artbreaker
http://cltampa.com/blogs/politicalanimals
http://cltampa.com/blogs/earbuds
http://cltampa.com/blogs/dailyloaf
http://cltampa.com/blogs/bedpost]
@scraper = Photocloud.new(start_urls)
@images =
@paths =
end
这部分需要一些帮助...
【问题讨论】:
标签: ruby-on-rails ruby nokogiri