我必须开发一个Ruby on Rails应用程序,从网页中获取所有图像,pdf, cgi等文件扩展名链接。
从页面抓取链接的最简单方法是使用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
您是否尝试过以下教程来学习如何首先解析网页:
- Nokogiri
- 机械化
另外,请注意,要小心解析的站点。似乎所有这些PDF,图像等可能会被您试图解析的网站注意到。我吸取了教训。
有时您可能能够从提要中获取信息。试试这个:
提要解析
忘掉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