如何使用httparty for rails 3解析og元标记

我试图使用此代码使用HTTParty gem解析og元标记:

link = http://www.usatoday.com/story/gameon/2013/01/08/nfl-jets-tony-sparano-fired/1817037/ # link = http://news.yahoo.com/chicago-lottery-winners-death-ruled-homicide-181627271.html resp = HTTParty.get(link) ret_body = resp.body # title og_title = ret_body.match(/\/) og_title = og_title[1].to_s 

问题是它在一些网站上工作(雅虎!)而不是其他网站(今天的美国)

不要用正则表达式解析HTML,因为除了最简单的问题之外,它们太脆弱了。 对HTML的微小改动可以打破这种模式,导致你开始一场维持不断扩展模式的缓慢战斗。 这是一场你不会赢的战争。

相反,使用HTML解析器。 Ruby有Nokogiri ,非常棒。 这就是我如何做你想做的事:

 require 'nokogiri' require 'httparty' %w[ http://www.usatoday.com/story/gameon/2013/01/08/nfl-jets-tony-sparano-fired/1817037/ http://news.yahoo.com/chicago-lottery-winners-death-ruled-homicide-181627271.html ].each do |link| resp = HTTParty.get(link) doc = Nokogiri::HTML(resp.body) puts doc.at('meta[property="og:title"]')['content'] end 

哪个输出:

喷气机射击进攻协调员Tony Sparano
芝加哥彩票冠军的死亡统治了一起凶杀案

也许我可以提供更简单的解决方案? 查看OpenGraph gem。

它是一个简单的库,用于从网站解析Open Graph协议信息,并且可以解决您的问题。

解:

 og_title = ret_body.match(/\<[Mm][Ee][Tt][Aa] property\=\"og:title\"\ content\=\"(.*?)\"[\s\/\>|\/\>]/) og_title = og_title[1].to_s 

尾随空格搞砸了解析,所以一定要检查一下。 我在正则表达式中添加了一个OR子句,以允许尾随和非尾随空格。