Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 抓取页面的所有URL_Ruby On Rails_Scrape - Fatal编程技术网

Ruby on rails 抓取页面的所有URL

Ruby on rails 抓取页面的所有URL,ruby-on-rails,scrape,Ruby On Rails,Scrape,我有一个片段可以在URL中成功地抓取图像,问题是,我想从各种网站收集大量图像,我不能每次都手动放置URL 既然我是个新手,你们是怎么面对的?刮取每个URL的最佳方法是什么? 我需要有一个CSV或什么的网址?是自动的吗 我的脚本 URL = 'http://www.sitasde.com' require 'rubygems' require 'nokogiri' require 'open-uri' require 'uri' def make_absolute( hre

我有一个片段可以在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

您需要指定一个模式

一种方法是(就像google的工作原理一样),您还可以检测所有的锚链接(),并将这些链接添加到队列中(就像在数组中)。完成对当前页面上的图像进行刮削后,将其从阵列中删除,继续到阵列中的下一页,重复相同的过程(查找所有链接,将其推送到阵列,在当前链接上保存图像,从阵列中删除当前链接)。重复此操作,直到数组的长度>0

但也可能有一个问题,比如大型网站的内存问题。因此,您还可以设置时间限制和内存限制。或者对代码本身进行限制。比如将其限制在同一个网站上,并将数组中的最大限制设置为100。如果你正在做的部分,保持记录这些网址,这样你就不会刮他们在未来再次

我建议使用数据库来跟踪被删除的URL