【问题标题】:How can I download an image from a website using Rails?如何使用 Rails 从网站下载图像?
【发布时间】:2018-10-22 05:37:15
【问题描述】:

我正在使用 Selenium-Webdriver、OpenUri 和 Nokogiri 来抓取网站。我想从所述网站下载特定图像到我的 Ubuntu 计算机。我尝试了几种不同的方法,但每种方法都会给出不同的错误消息。

这是我的基本代码,它打开网站并获取图像 url(之后我在 pry 控制台中运行的所有内容):

require 'open-url'
require 'selenium-webdriver'
require 'nokogiri'
require 'uri'

url = "https://www.google.com/"
browser = Selenium::WebDriver.for :chrome
document = open(url).read
parsed_content = Nokogiri::HTML(content)
image = "https://www.google.com" + parsed_content.css('#hplogo').attr('src').value
binding.pry

1)这是我尝试下载图片的第一件事:

download = open(image)
IO.copy_stream(download, '~/image.png')

为此,我收到以下错误:

Errno::ENOENT: No such file or directory @ rb_sysopen - ~/image.png from (pry):44:in 'initialize'

根据this question,我尝试在代码中添加目录:

FileUtils.mkdir_p(image) unless File.exist?(image)

但我遇到了同样的错误。


2)接下来我尝试了这个:

open('image.png', 'wb') do |file|
  file << open(image).read
end

这会返回

#<File:image.png (closed)

但该文件不在我计算机上的任何位置,我无法弄清楚该消息的含义。


3)接下来我尝试了

IO.copy_stream(open(image), 'image.png')

简单地返回这个:

5482

但同样,我不知道这意味着什么,并且文件不在任何地方。


4)最后我尝试了

read_image = open(image).read
File.open(image, 'image.png') do |file|
  file.puts read_image
end

哪个输出

ArgumentError: 无效的访问模式 image.png 来自 (pry):53:in 'initialize


我做错了什么?我是否接近我的任何方法?

【问题讨论】:

    标签: ruby-on-rails ruby selenium nokogiri open-uri


    【解决方案1】:

    文件打开的第二个参数是文件打开的模式。

    read_image = open(image).read
    File.open('image.png', 'w+') do |file|
      file.write read_image
    end
    

    您的第三个变体效果很好。 5482 - 文件长度。与 .rb 文件位于同一目录中的文件“image.png”。

    【讨论】:

    • 哦,哇,我没想到它会在那里!有什么方法可以指定它应该在的目录吗?
    • 您可以指定文件的绝对路径,而不是 'image.png'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2014-06-08
    • 2017-04-27
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多