好吧,紅寶石的瘋狂下載與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)存儲到臨時變量中? –