2013-03-01 73 views
0

我开始使用ruby编程语言。我有一个Ruby脚本检索的PDF文件页面上海葵:使用webcrawler下载pdf文件

Anemone.crawl("http://example.com") do |anemone| 
    anemone.on_pages_like(/\b.+.pdf/) do |page| 
    puts page.url 
    end 
end 

我用宝石红宝石想下载page.url。我可以使用什么宝石来下载page.url?

+1

当然,你可以在网上搜索“ruby http clients”或类似的东西?有很多图书馆这样做... – maerics 2013-03-01 17:00:28

回答

-1

如果你是在UNIX系统上,也许UnixUtils

Anemone.crawl("http://example.com") do |anemone| 
    anemone.on_pages_like(/\b.+.pdf/) do |page| 
    puts page.url   # => http://example.com/foo.bar 
    puts UnixUtils.curl(url) # => /tmp/foo.bar.1239u98sd 
    end 
end 
+2

恕我直言,'curl'绝对是一个矫枉过正的地方。 – mudasobwa 2013-03-01 18:47:25

+1

请求Curl在内容已经下载后第二次下载文件会浪费带宽和时间。 – 2013-03-02 04:12:50

3

无需额外的宝石,试试这个

require 'anemone' 

Anemone.crawl("http://www.rubyinside.com/media/",:depth_limit => 1, :obey_robots_txt => true, :skip_query_strings => true) do |anemone| 
    anemone.on_pages_like(/\b.+.pdf/) do |page| 
    begin 
     filename = File.basename(page.url.request_uri.to_s) 
     File.open(filename,"wb") {|f| f.write(page.body)} 
     puts "downloaded #{page.url}" 
    rescue 
     puts "error while downloading #{page.url}" 
    end 
    end 
end 

downloaded http://www.rubyinside.com/media/poignant-guide.pdf 

和PDF很好。

+0

非常感谢,但是我仍然有问题。有些情况下,pdf文件下载时可以互换(覆盖) – 2013-03-02 14:12:39

+0

您下载哪个站点?您可以通过添加例如计数器来使文件名具有唯一性,以便它们不会被覆盖和/或从站点重新创建文件夹结构 – peter 2013-03-02 20:54:53