数据搜索限制

时间:2013-08-13 19:17:24

标签: ruby-on-rails ruby nokogiri

我正在使用红宝石种子文件从APOD(当天的天文图片)中删除数据。由于有数以千计的条目,有没有办法限制刮擦只是拉过去365图像?

这是我正在使用的种子代码:

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."

1 个答案:

答案 0 :(得分:1)

您可以将节点集视为数组,以获取特定索引之间的元素。

[0..364]添加到节点链接集:

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