[英]Ruby Madness Downloading same file with Nokogiri, Mechanize and OpenUri to get different information
好,
我正在編寫無處不在的爬蟲,並且遇到了一些問題。 〜成為Ruby的新手並不奇怪。
我使用Nokogiri獲取頁面的html-在其中找到我感興趣的所有鏈接,然后下載與這些鏈接關聯的文件。 到目前為止一切都很好。
但是,我似乎無法通過一種方法獲得所需的信息。
如果我使用file = open(Src).read
那么file包含文件的內容-這對於保存到數據庫以及進行哈希處理非常file = open(Src).read
。 但這並不能使我輕松訪問(據我所知)諸如文件名,大小,文件類型等屬性。
為了獲得該信息,我使用Mechanize像這樣:
agent = Mechanize.new
fop = agent.get(Src)
使用head agent.head方法,我可以獲取內容類型,上次修改日期和內容長度。 fop.filename
當然會給我文件名。 現在使用agent.head(Src)["content-type"]
方法,我認為是重新下載信息,以便進行內容類型調用,最后修改和內容長度調用-它下載了3次head。 我想說的是文件浪費已經包含了完整的文件,而fop應該為我提供我需要的所有其他信息,而無需打電話給head。
因此,有沒有更好的方法(通過指甲下載器)
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 = Mechanize.new
thumbs.each do |thumb|
imgUrl = thumb.css('.t_img').first['src']
imgTitle = thumb.css('.t_img').first['alt']
image = agent.get(imgSrc)
p image
puts "1 Driver : prowl.rb"
puts "1 Source : " + pageURL
puts "1 Title : " + imgTitle
puts "1 File Source : " + imgUrl
puts "1 File Type : " + image.header['content-type']
puts "1 File Name : " + image.filename
puts "1 Last Modified : " + image.header["last-modified"]
puts "1 Image Size : " + image.header["content-length"]
puts "1 MD5 : " + GetMD5(*[image.content.to_s])
puts "1 SHA256 : " + GetSha256(*[image.content.to_s])
end
這里是。 重用該代理,每次創建一個新代理都是沒有意義的。
直接從Mechanize獲取頁面,無需打開和閱讀然后傳遞內容。 您要查找的所有標題信息都在頁面的header
屬性中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.