我想下载此链接中提供的所有产品图片:
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"
如何通过传递单个网址下载该产品的所有图片?
答案 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