2010-09-02 2 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

+0

Упс. Отредактировано для исправления (/ удаления проблемы). – adamse

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 
Смежные вопросы