如何下载URL中提供的所有图像?

时间:2016-01-06 16:19:32

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems mechanize

我想下载此链接中提供的所有产品图片:

http://www.veromoda.in/vero-moda-women-s-white-coloured-casual-shirt-4.html

我知道如何通过传递每张图片的网址来下载单张图片:

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
link = 'http://www.veromoda.in/media/catalog/product/cache/1/thumbnail/9df78eab33525d08d6e5fb8d27136e95/1/0/10074424-snowwhite-1.jpg'
agent.get(link).save "images/pic.jpg"

如何通过传递单个网址下载该产品的所有图片?

3 个答案:

答案 0 :(得分:2)

这是查找页面中所有图像的核心:

require 'nokogiri'
require 'restclient'

doc = Nokogiri::HTML(RestClient.get('http://www.iana.org/domains/reserved'))
images = doc.search('img').map{ |img| img['src'] }
images[0..2] # => ["/_img/2013.1/iana-logo-header.svg", "/_img/2013.1/icann-logo.svg"]

遍历src中的images个网址,每个get,然后保存。

您可以看到,需要对URL进行一些修复以使其完全定义,这样才能完成下载文件的部分任务。你需要弄清楚如何做到这一点。

您还需要弄清楚如何判断您想要的图像,而不是广告或导航元素,定位等。

您还想了解如何成为一名优秀的网络公民并尊重robots.txt文件,如果目标网站有一个,并加快您的请求,以免他们的网络饱和并使其服务器陷入困境(s如果你正在进行图像擒杀和掠夺,否则预计会被禁止。

答案 1 :(得分:0)

您可以使用Nokogiri gem来解析HTML。使用selectorgadget 了解HTML中的标签,结构和模式,以解析和存储所需的数据。

答案 2 :(得分:0)

我是通过以下方式完成的。我在这里张贴它可能对任何人都有用。

url="http://www.veromoda.in/elastic/search/fetch/?q=#{id}"
agent.get("#{url}")
links=agent.page.css('a').map { |k| k.attributes['href'].value }
if links.empty?
  puts "Images for #{id} not available"
else
  links.each do |l|
    agent.get("#{l}")
    agent.page.image_urls
    image_links=agent.page.search('.lSPager').css('img')

    image_links.each do |link|
      image_name=File.basename(link.attributes["src"])
      agent.get(link.attributes["src"]).save "vero_moda_images/#{id}/#{image_name}"
    end
 end
 puts "Your #{id} Images Downloaded"
end