2016-09-23 171 views
0

我有一個包含許多zip文件的url,我需要下載它們的本地副本。我到目前爲止:使用Ruby從URL下載文件

require 'open-uri' 
require 'pry' 

def download_xml(url, dest) 
    open(url) do |u| 
    File.open(dest, 'wb') { |f| f.write(u.read) } 
    end 
end 

urls = ["http://feed.omgili.com/5Rh5AMTrc4Pv/mainstream/posts/"] 

urls.each { |url| download_xml(url, url.split('/').last) } 

但是,我似乎無法訪問位於該位置的zip文件或通過它們循環。我將如何遍歷該URL末尾的每個zip文件,以便可以在該數組中訪問它們並通過該方法下載它們?

+0

請不要忘記標記我的答案是它應得的正確答案。非常感謝! – mertyildiran

+0

我會確保! –

回答

1

我已經使用引入nokogiri寶石解析HTML,所以先安裝引入nokogiri寶石:

sudo apt-get install build-essential patch 
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev 
sudo gem install nokogiri 

解決特定問題的方法:

noko.rb

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

page = Nokogiri::HTML(open("http://feed.omgili.com/5Rh5AMTrc4Pv/mainstream/posts/")) # Open web address with Nokogiri 
puts page.class # => Nokogiri::HTML::Documents 

for file_link in page.css('a') # For each a HTML tag/link 
    if file_link.text[-4,4] != ".zip" # If it's not a zip file 
    next # Continue the loop 
    end 
    link = "http://feed.omgili.com/5Rh5AMTrc4Pv/mainstream/posts/" + file_link.text # Generate the zip file's link 
    puts link 
    open(file_link.text, 'wb') do |file| 
    file << open(link).read # Save the zip file to this directory 
    end 
    puts file_link.text + " has been downloaded." 
end 

我用評論解釋了代碼。

最終,除了解析HTML文件並逐個生成下載鏈接並最終下載外,別無選擇。

+0

太棒了!我今天晚上試試!非常感謝!我讀過關於Nokogiri,但沒有太多資源。我在C#MVC中工作,晚上回家時,我們的本地Ruby用戶組Slack團隊中沒有人可用。哈哈但是,我真的很感激它 - 特別是評論!再次感謝,我會在今天晚上彙報。 –