如何从网页获取所有图像,pdf和其他文件链接?

时间:2012-01-04 06:06:15

标签: ruby ruby-on-rails-3 nokogiri hpricot

我必须开发一个Ruby on Rails应用程序,它从网页中提取所有图像,pdf,cgi等文件扩展名链接。

3 个答案:

答案 0 :(得分:7)

从网页抓取链接的最简单方法是使用URI.extract。来自文档:

  

描述

     

从字符串中提取URI。如果给定块,则遍历所有匹配的URI。如果给定块或带匹配的数组,则返回nil。

     

用法

require "uri"

URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
# => ["http://foo.example.com/bla", "mailto:test@example.com"]

看这个页面:

require 'open-uri'
require 'uri'

html = open('http://stackoverflow.com/questions/8722693/how-to-get-all-image-pdf-and-other-files-links-from-a-web-page/8724632#8724632').read

puts URI.extract(html).select{ |l| l[/\.(?:gif|png|jpe?g)\b/]}

返回:

http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png
http://sstatic.net/stackoverflow/img/apple-touch-icon.png
http://foobar.com/path/to/file.gif?some_query=1
http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif

答案 1 :(得分:4)

您是否尝试过以下教程以了解如何首先解析网页:

另外,请注意您要解析的网站。似乎可以通过您尝试解析的网站注意到所有这些PDF,图像等。我学到了很多东西。

有时您可能会从Feed中获取信息。试试这个:

Feed Parsing

答案 2 :(得分:3)

忘记Net :: HTTP,Open :: URI要容易得多。这里有一些代码可以帮助您入门:

require 'nokogiri'
require 'open-uri'

url = 'http://www.google.com/'
doc = Nokogiri::HTML(open(url))
doc.traverse do |el|
    [el[:src], el[:href]].grep(/\.(gif|jpg|png|pdf)$/i).map{|l| URI.join(url, l).to_s}.each do |link|
        File.open(File.basename(link),'wb'){|f| f << open(link,'rb').read}
    end
end