使用 Nokogiri::HTML 和 Ruby 进行网页抓取 - 保存图像

问题描述 投票:0回答:1

我正在编写一个脚本来从网上商店产品页面获取数据和图像 (经业主同意)

我有一个工作脚本,它循环遍历包含 20042 个产品 URL 的 CSV 文件,以获取存储在 CSV 文件中的所需数据。我需要的最后一件事是保存产品图像。

我有这段代码(感谢这个线程中的Phrogz)

    URL = 'http://www.sample.com/page.html'

    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('//*[@id="zoom"]/@href').each do |src|
      uri = make_absolute(src,URL)
      File.open(File.basename(uri),'wb'){ |f| f.write(open(uri).read) }
    end

这对于单独的 URL 来说运行得很好,但我正在努力让它工作并在我的主脚本中循环遍历 CSV 文件中的 URL,其开头如下:

    # encoding: utf-8
    require 'nokogiri'
    require 'open-uri'
    require 'csv'
    require 'mechanize'

    @prices = Array.new
    @title = Array.new
    @description = Array.new
    @warranty = Array.new
    @leadtime = Array.new
    @urls = Array.new 
    @categories = Array.new
    @subcategories = Array.new
    @subsubcategories = Array.new

    urls = CSV.read("lotofurls.csv")
    (0..urls.length - 1).each do |index|

      puts urls[index][0]
        doc = Nokogiri::HTML(open(urls[index][0]))

看起来我需要弄清楚的是如何将网址提供给保存图像的代码,但任何帮助将不胜感激!

ruby image web-scraping nokogiri
1个回答
1
投票

您可以使用 RMagick(或 ImageMagick、MiniMagick 等)等工具快速完成此工作

对于 RMagick,你可以这样做

require 'rmagick'

images.each do |image|
  url = image.url # should be a string
  Magick::Image.read(url).first.resize_to_fill(200,200).write(image.desired_filename)
end    

这将为您提供的每个网址写入一个 200x200px 的图像(显然,resize_to_fill 是可选的)。 该库非常强大,有很多很多选项。 如果你走这条路,我推荐使用railscast进行图像处理:http://railscasts.com/episodes/374-image-manipulation

如果您想获得更高级的信息,请参阅文档:http://rmagick.rubyforge.org/

© www.soinside.com 2019 - 2024. All rights reserved.