我想将所有这些信息收集并存储到数组中。
我有以下内容,我该怎么重构呢?
require 'rubygems'
require 'nokogiri'
require 'open-uri'
@urls = %w{http://url_01.com http://url_02.com http://url_03.com}
@link_01_arr = []
@link_02_arr = []
@link_03_arr = []
link_01 = Nokogiri::HTML(open("#{@urls[0]}"))
@link_01_arr[0] = link_01.at("title").inner_html
@link_01_arr[1] = link_01.at(".content").inner_html
@link_01_arr[2] = link_01.at(".date").inner_html
我试过这样做,但结果明显变慢了。我猜是因为这样有更多的请求。
@urls = %w{http://url_01.com http://url_02.com http://url_03.com}
@titles_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at("title").inner_html
end
@content_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at(".content").inner_html
end
@date_arr = @urls.map do |url|
Nokogiri::HTML(open(url)).at(".date").inner_html
end
答案 0 :(得分:1)
如果不知道如何使用数据,很难知道如何重构代码。但是,我会使用具有有意义键(作为符号)的散列而不是数组。这大大提高了使用数据时的可读性。这是一个建议:
urls = %w{http://url_01.com http://url_02.com http://url_03.com}
data = urls.collect do |url|
document = Nokogiri::HTML(open(url))
{ :title => document.at("title").inner_html,
:content => document.at(".content").inner_html,
:date => document.at(".date").inner_html }
end
# Accessing the data:
data[0] #=> { :title => "...", :content => "...", :date => "..." }
data[0][:title] #=> Returns title of first URL
data[1][:date] #=> Returns date of second URL
答案 1 :(得分:0)
@titles_arr = []
@content_arr = []
@date_arr = []
@urls.each do |url|
curr = Nokogiri::HTML(open(url))
@titles_arr << curr.at("title").inner_html
@content_arr << curr.at(".content").inner_html
@date_arr << curr.at(".date").inner_html
end