Как я могу скачать изображение с веб-сайта, используя Rails? - PullRequest
0 голосов
/ 11 мая 2018

Я использую 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 from (pry): 44: в 'initialize'

Согласно thisвопрос , я попытался добавить каталог в коде:

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: неверноaccess mode image.png from (pry): 53: in 'initialize


Что я делаю не так?Был ли я близок с любым из моих подходов?

1 Ответ

0 голосов
/ 11 мая 2018

Второй аргумент открытия файла - это режим для открытия файла.

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

Ваш третий вариант работает хорошо. 5482 - длина файла. Файл 'image.png' находится в том же каталоге, что и ваш файл .rb.

...