2014-10-03 109 views
0

我有一个片段,可以在URL中成功抓取图像,事情是,我想从各种网站收集大量图像,并且我不能每次都手动放置URL 。刮一个页面的所有URL

由于我是新手,所以你们怎么面对这个?什么是刮去每个网址的最佳方式? 我需要URL中的CSV或其他东西吗?它是自动的吗?

我的脚本

URL = 'http://www.sitasde.com' 

    require 'rubygems' 
    require 'nokogiri' 
    require 'open-uri' 
    require 'uri' 

    def make_absolute(href, root) 
    URI.parse(root).merge(URI.parse(href)).to_s 
    end 

    Nokogiri::HTML(open(URL)).xpath("//img/@src").each do |src| 
    uri = make_absolute(src,URL) 
    File.open(File.basename(uri),'wb'){ |f| f.write(open(uri).read) } 
    end 

回答

0

您需要指定一种模式。你可以检测所有的锚链接(),并将这些链接添加到队列中(就像在数组中一样)。一旦完成了在当前页面上抓取图像,将其从数组中移除,移动到数组中的下一页,重复相同的过程(查找所有链接,将它们推送到数组,在当前链接上保存图像,从数组中删除当前链接)。重复此操作,直到数组长度> 0。

但是可能会出现问题,例如大型网站的内存问题。所以你也可以设置时间限制和内存限制。或者在您的代码本身中添加一个限制。像限制到同一个网站,并设置数组的最大限制为100。如果你正在做的部分,保持这些URL的记录,所以你今后不要再刮。

我会建议使用数据库来跟踪挖掘的URL。