2010-09-02 80 views
1

我想收集和存儲所有這些信息到一個數組中。我應該如何重構這個?

我有以下幾點,我該如何重構這個?

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
@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 
+0

這段代碼壞了;你只創建一個數組。 – molf 2010-09-02 20:57:24

+0

哎呦。編輯修復(/刪除問題)。 – adamse 2010-09-02 22:08:21

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