好吧,红宝石的疯狂下载与Nokogiri相同的文件,机械化和OpenUri获得不同的信息
我正在写无处不在的爬虫,并遇到了一些问题。 〜毫不奇怪,在Ruby的时候总是一个noob。
我使用Nokogiri来获取页面的html - 找到我感兴趣的所有链接,然后下载与这些链接相关的文件。一切都很好。
但是,我似乎无法从单一方法获取所需的信息。
如果我使用file = open(Src).read
那么文件包含文件的内容 - 这非常适合保存到数据库以及散列目的。但它并没有给我轻松访问(只要我发现)将属性如文件名,大小,文件类型等
为了让我使用机械化像这样的信息:
agent = Mechanize.new
fop = agent.get(Src)
使用head agent.head方法,我可以获取内容类型,上次修改日期和内容长度。 fop.filename
给我当然的文件名。现在使用agent.head(Src)["content-type"]
方法是,我认为重新下载信息,以便进行内容类型,上次修改和内容长度调用 - 它正在下载头部3次。我认为文件的总浪费已经包含了完整的文件,fop应该提供给我所需的所有其他信息,而不需要打电话给我。
那么有没有这样做(从拇指指甲下载)更好的方式
thumbs.each do |thumb|
imgSrc = thumb.css('.t_img').first['src']
file = open(imgSrc).read
agent = Mechanize.new
fop = agent.get(imgSrc)
p fop
puts "1 Driver : prowl.rb"
puts "1 Source : " + pageURL
puts "1 Title : " + thumb.css('.t_img').first['alt']
puts "1 File Source : " + imgSrc
puts "1 File Type : " + agent.head(imgSrc)["content-type"].to_s
puts "1 File Name : " + fop.filename
puts "1 Last Modified : " + agent.head(imgSrc)["last-modified"].to_s
puts "1 Image Size : " + agent.head(imgSrc)["content-length"].to_s
puts "1 MD5 : " + GetMD5(*[file.to_s])
puts "1 SHA256 : " + GetSha256(*[file.to_s])
end
所以,问题是:
- 如何优化我的履带,这样我可以得到所有我想要的最少数量的请求信息?
您能否将agent.head(imgSrc)存储到临时变量中? –