如何使用Rails从网站下载图像?

3
我正在使用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: 找不到文件或目录@ rb_sysopen - ~/image.png 来自(pry):44:'initialize'

根据这个问题的解答,我尝试在代码中添加了一个目录。
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

我做错了什么?我的任何尝试都接近了吗?

参数错误:无效访问模式image.png 来自(pry):53:'initialize


输出是什么意思?

1个回答

4

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

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

你的第三个变量运行良好。 5482 - 文件长度。文件'image.png'与你的.rb文件在同一目录中。

哦,哇,我没想到它会在那里!有没有办法我可以指定它应该在哪个目录中? - Joe Morano
你可以指定文件的绝对路径,而不是使用'image.png'。 - Artem Dorodovskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接