刮取页面的所有URL

时间:2014-10-03 20:22:05

标签: ruby-on-rails scrape

我有一个可以在URL中成功抓取图像的片段,事实上,我想从各个网站收集大量图片,而且我不能每次都手动放置URL。

由于我刚开始刮痧,你们怎么面对这个?刮掉每个URL的最佳方法是什么? 我需要在CSV或其他内容中使用URL吗?它是自动的吗?

我的剧本

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

1 个答案:

答案 0 :(得分:0)

您需要指定一个模式。

一种方法是(就像谷歌的工作方式),你也可以检测所有锚链接(),并将这些链接添加到队列(如数组)。完成当前页面上的图像抓取后,将其从阵列中删除,转到阵列中的下一页,重复相同的过程(查找所有链接,将其推送到阵列,将图像保存到当前链接,从阵列中删除当前链接) )。重复此操作,直到数组长度> 0。

但是可能存在问题,例如大型网站的内存问题。所以你也可以设置时间限制和内存限制。或者对代码本身进行限制。比如将它限制在同一个网站,并将数组中的最大限制设置为100。如果您正在进行部分操作,请记录这些网址,以便将来不再刮取它们。

我建议使用数据库来跟踪抓取的网址。