我有一个可以在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
答案 0 :(得分:0)
您需要指定一个模式。
一种方法是(就像谷歌的工作方式),你也可以检测所有锚链接(),并将这些链接添加到队列(如数组)。完成当前页面上的图像抓取后,将其从阵列中删除,转到阵列中的下一页,重复相同的过程(查找所有链接,将其推送到阵列,将图像保存到当前链接,从阵列中删除当前链接) )。重复此操作,直到数组长度> 0。
但是可能存在问题,例如大型网站的内存问题。所以你也可以设置时间限制和内存限制。或者对代码本身进行限制。比如将它限制在同一个网站,并将数组中的最大限制设置为100。如果您正在进行部分操作,请记录这些网址,以便将来不再刮取它们。
我建议使用数据库来跟踪抓取的网址。