我希望能够查看用户输入网址的页面是否包含类似的内容:
<link rel="alternate" type="application/rss+xml" ... href="http://feeds.example.com/MyBlog"/>
这样我就可以省去一个解析原子或rss feed url的选项。
有什么好办法吗?我是否必须让我的服务器解析用户网址的整个HTML并将其全部删除?
我需要解析后使用变量中的url
答案 0 :(得分:2)
您可以使用Nokogiri宝石 - http://www.nokogiri.org/
以下是使用css样式文档搜索语法的示例:
require 'nokogiri'
require 'open-uri'
document = Nokogiri::HTML(open('http://www.example.com/'))
rss_xml_nodes = doc.css('link[rel="alternate"][type="application/rss+xml"]')
rss_xml_hrefs = rss_xml_nodes.collect { |node| node[:href] }
rss_xml_nodes将包含一个Nokogiri XML元素数组
rss_xml_hrefs将包含一个包含节点'href属性
的字符串数组rss_xml_nodes.empty?
=> false
rss_xml_hrefs
=> ["http://www.example.com/rss-feed.xml", "http://www.example.com/rss-feed2.xml"]
答案 1 :(得分:0)
我相信你确实必须解析所有这些内容,因为除了通过一个http请求获取所有内容之外,没有办法获得任何内容。为此,您可以使用Ruby的Net:HTTP类,如下所示:
require 'net/http'
url = URI.parse('http://www.example.com/index.html')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
# regex below grabs all the hrefs on link tags
# print all the matches
res.body.scan(/<link[^>]*href\s*=\s*["']([^"']*)/).each {|match|
puts match
}