【发布时间】:2014-11-13 16:19:35
【问题描述】:
我想从一个 URL 下载图片,例如:http://trinity.e-stile.ru/,并将图片保存到一个目录,例如“C:\pickaxe\pictures”。使用 Nokogiri 很重要。
我在这个网站上阅读了类似的问题,但我没有找到它是如何工作的,我也不了解算法。
-
我编写了解析 URL 的代码,并将带有“img”标签的部分网页源代码放入链接对象中:
require 'nokogiri' require 'open-uri' PAGE_URL="http://trinity.e-stile.ru/" page=Nokogiri::HTML(open(PAGE_URL)) #parsing into object links=page.css("img") #object with html code with img tag puts links.length # it is 24 images on this url puts links.each{|i| puts i } #it looks like: <img border="0" alt="" src="/images/kroliku.jpg"> puts puts links.each{|link| puts link['src'] } #/images/kroliku.jpg抓取HTML代码后用什么方法保存图片?
如何将图像放入磁盘上的目录中?
我改了代码,还是有错误:
/home/action/.parts/packages/ruby2.1/2.1.1/lib/ruby/2.1.0/net/http.rb:879:in `initialize': getaddrinfo: Name or service not known (SocketError)
这是现在的代码:
require 'nokogiri'
require 'open-uri'
require 'net/http'
LOCATION = 'pics'
if !File.exist? LOCATION # create folder if it is not exist
require 'fileutils'
FileUtils.mkpath LOCATION
end
#PAGE_URL = "http://ruby.bastardsbook.com/files/hello-webpage.html"
#PAGE_URL="http://trinity.e-stile.ru/"
PAGE_URL="http://www.youtube.com/"
page=Nokogiri::HTML(open(PAGE_URL))
links=page.css("img")
links.each{|link|
Net::HTTP.start(PAGE_URL) do |http|
localname = link.gsub /.*\//, '' # left the filename only
resp = http.get link['src']
open("#{LOCATION}/#{localname}", "wb") do |file|
file.write resp.body
end
end
}
【问题讨论】:
标签: ruby-on-rails ruby nokogiri