Ruby疯狂下载相同的文件与Nokogiri,机械化和OpenUri获得不同的信息



好的,

我正在写无处不在的爬虫,遇到了一些问题~在Ruby成为一个不折不扣的傻瓜并不奇怪。

我使用Nokogiri获取页面的html-找到我感兴趣的所有链接,然后下载与这些链接相关的文件。到目前为止一切都很好。

然而,我似乎无法从单一的方法中获得所需的信息。

若我使用file = open(Src).read,那个么file包含文件的内容——这对于保存到数据库和哈希来说非常好。但它并不能让我轻松访问(据我所知(文件名、大小、文件类型等属性。

为了获得这些信息,我正在使用机械化,如下所示:

agent = Mechanize.new
fop = agent.get(Src)

使用headagent.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 

所以问题是:

  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

就是这样。重用代理,没有必要每次都创建一个新的代理。

直接从机械化获取页面,无需打开和阅读,然后传递内容。您要查找的所有标题信息都在页面的header属性中。

相关内容

  • 没有找到相关文章

最新更新