Ruby on rails 如何下载URL中的所有可用图像?

Ruby on rails 如何下载URL中的所有可用图像?,ruby-on-rails,ruby,ruby-on-rails-4,rubygems,mechanize,Ruby On Rails,Ruby,Ruby On Rails 4,Rubygems,Mechanize,我想下载此链接中提供的产品的所有图像: http://www.veromoda.in/vero-moda-women-s-white-coloured-casual-shirt-4.html 我知道如何通过传递每个图像的URL下载单个图像: require 'rubygems' require 'mechanize' agent = Mechanize.new link = 'http://www.veromoda.in/media/catalog/product/cache/1/thumb

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

http://www.veromoda.in/vero-moda-women-s-white-coloured-casual-shirt-4.html
我知道如何通过传递每个图像的URL下载单个图像:

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"
如何通过传递单个url下载该产品的所有图像?

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

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

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

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"]
images
中的
src
URL上循环,
获取每个URL,然后保存它

您可以看到,需要对URL进行一些修改,以使其完全定义,因此这是下载文件任务的一部分。你需要弄清楚怎么做

你还需要弄清楚如何区分你想要的图像是什么,而不是广告或导航元素、定位等等


如果目标站点有robots.txt文件,您还需要了解如何成为一个好的网络公民,并尊重robots.txt文件,如果您正在进行图像窃取和掠夺,还需要限制您的请求,以避免其网络饱和和服务器瘫痪,否则将被禁止

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

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"]
images
中的
src
URL上循环,
获取每个URL,然后保存它

您可以看到,需要对URL进行一些修改,以使其完全定义,因此这是下载文件任务的一部分。你需要弄清楚怎么做

你还需要弄清楚如何区分你想要的图像是什么,而不是广告或导航元素、定位等等


如果目标站点有robots.txt文件,您还需要了解如何成为一个好的网络公民,并尊重robots.txt文件,如果您正在进行图像窃取和掠夺,还需要限制您的请求,以避免其网络饱和和服务器瘫痪,否则将被禁止

我是这样做的。我在这里发布,它可能对任何人都有用。

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

我是这样做的。我在这里发布,它可能对任何人都有用。

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

您需要使用某种html解析器从所有
img
标记中提取
src
属性。Nokogiri是一个流行的选择。欢迎使用堆栈溢出。你的问题太宽泛了。我们不知道你的专业水平,所以我们必须写一篇教程,从你在问题中向我们展示的内容开始。相反,你需要做更多的研究,并试图解决这个问题,然后,当你有一个具体的问题,问它。您的问题在SO和internet上的其他地方都有多个答案。您需要使用某种html解析器从所有
img
标记中提取
src
属性。Nokogiri是一个流行的选择。欢迎使用堆栈溢出。你的问题太宽泛了。我们不知道你的专业水平,所以我们必须写一篇教程,从你在问题中向我们展示的内容开始。相反,你需要做更多的研究,并试图解决这个问题,然后,当你有一个具体的问题,问它。你的问题在SO和互联网上的其他地方都有多个答案。Mechanize可以做到这一点,但通常使用Nokogiri会更快更容易。Mechanize使用Nokogiri解析文档,这证明了Nokogiri的威力。使用任何基于浏览器的工具来识别页面中元素的选择器/路径时,都要非常小心。浏览器“修复”HTML,在显示之前将其从原始形式更改,并在源代码视图中反映更改后的HTML。相反,使用
curl
wget
或OpenURI检索页面并在文本编辑器中查看。Mechanize可以做到这一点,但通常使用Nokogiri会更快、更容易。Mechanize使用Nokogiri解析文档,这证明了Nokogiri的威力。使用任何基于浏览器的工具来识别页面中元素的选择器/路径时,都要非常小心。浏览器“修复”HTML,在显示之前将其从原始形式更改,并在源代码视图中反映更改后的HTML。相反,使用
curl
wget
或OpenURI检索页面并在文本编辑器中查看。