2013-08-13 5 views
1

Я использую файл рубинового семени, который сбрасывает данные из APOD (Астрономическая картинка дня). Поскольку есть тысячи записей, есть ли способ ограничить царапины, чтобы просто вытащить прошлые 365 изображений?Ограничение поиска данных Scale

Вот код семян я использую:

require 'rubygems' 
require 'open-uri' 
require 'open-uri' 
require 'nokogiri' 
require 'curl' 
require 'fileutils' 

BASE = 'http://antwrp.gsfc.nasa.gov/apod/' 
FileUtils.mkdir('small') unless File.exist?('small') 
FileUtils.mkdir('big') unless File.exist?('big') 

f = open 'http://antwrp.gsfc.nasa.gov/apod/archivepix.html' 
html_doc = Nokogiri::HTML(f.read) 
html_doc.xpath('//b//a').each do |element| 
    imgurl = BASE + element.attributes['href'].value 
    doc = Nokogiri::HTML(open(imgurl).read) 
    doc.xpath('//p//a//img').each do |elem| 
     small_img = BASE + elem.attributes['src'].value 
     big_img = BASE + elem.parent.attributes['href'].value 
     s_img_f = open("small/#{File.basename(small_img)}", 'wb') 
     b_img_f = open("big/#{File.basename(big_img)}", 'wb') 
     rs_img = Curl::Easy.new(small_img) 
     rb_img = Curl::Easy.new(big_img) 
     rs_img.perform 
     s_img_f.write(rs_img.body_str) 
     rb_img.perform 
     b_img_f.write(rb_img.body_str) 
     s_img_f.close 
     puts "Download #{File.basename(small_img)} finished." 
     b_img_f.close 
     puts "Download #{File.basename(big_img)} finished." 
     rs_img.close 
     rb_img.close 
    end 
end 
puts "All done." 
+0

Почему вы требуете OpenURI дважды? Когда вы это сделаете, это будет не так быстро. –

+0

Случайно скопировал эту строку дважды при размещении вопроса – Reuben

ответ

1

можно лечить узел установить как массив, чтобы получить элементы между конкретным индексом.

Добавить [0..364] в наборе узлов ссылок:

html_doc.xpath('//b//a')[0..364].each do |element| 
+0

'0..365' составляет 366 элементов. –

+0

Спасибо @theTinMan. Код обновлен. –

Смежные вопросы