簡體   English   中英

Ruby Madness使用Nokogiri,Mechanize和OpenUri下載相同的文件以獲取不同的信息

[英]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 

所以問題是:

  1. 如何優化我的搜尋器,以便可以在最少的請求數下獲得所需的所有信息? 和,
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM