2010-10-27 41 views
1

我已经成功地使用ruby(1.8)和nokogiri的css解析来从网页中提取前端数据。如何用ruby/nokogiri解析html源代码?

但是我现在需要从页面源代码中的“meta”标签中的数据页面中提取一些数据。

一个我需要的线路如下:

<meta name="geo.position" content="35.667459;139.706256" /> 

我使用XPath放一直没能得到它的权利审判。

任何帮助,需要什么语法将不胜感激。

感谢

+4

你说“我已经使用XPath放一直没能得到它的权利试过了。” **向我们展示您尝试过的**,以便我们可以帮助您做到正确。 – 2010-10-27 04:58:09

+0

Thx Andy - 用各种方式说'// meta [blah]'等等。我只是无法得到正确的语法来将它拉出来。我真的想用CSS选择器来做,现在我知道如何。 – rollbahn 2010-10-27 05:32:42

回答

2

这是一个CSS attribute selector一个很好的案例。例如:

doc.css('meta[name="geo.position"]').each do |meta_tag| 
    puts meta_tag['content'] # => 35.667459;139.706256 
end 

等效XPath表达式几乎是相同的:

doc.xpath('//meta[@name = "geo.position"]').each do |meta_tag| 
    puts meta_tag['content'] # => 35.667459;139.706256 
end 
+0

哇谢谢我不知道你也可以使用元标签的CSS选择器。 如果我想从js获得纬度/经度,这同样适用吗? <脚本类型= “文本/ JavaScript的”> // <![CDATA [ 功能的onLoad(){\t 如果(GBrowserIsCompatible()){ VAR地图=新的GMap2(的document.getElementById( “映射”) ); map.addControl(new GSmallMapControl()); var point1 =新的GLatLng(35.667459,139.706256); map.setCenter(point1,15,G_NORMAL_MAP); var marker = new GMarker(point1,{clickable:false}); map.addOverlay(marker); } } //]]> – rollbahn 2010-10-27 05:26:37

+0

不,Nokogiri不会做Javascript。您可以使用Nokogiri从HTML中提取Javascript,然后使用正则表达式来获取经纬度。 'doc.at('script')。content [/ GLatLng \\(([^)] +)\\)/,1]#=>“35.667459,139.706256”'例如。 – 2010-10-27 05:40:22

+0

Aha好的非常感谢您的帮助 - 这真的让事情变得更清晰。 – rollbahn 2010-10-27 05:47:04

1
require 'nokogiri' 

doc = Nokogiri::HTML('<meta name="geo.position" content="35.667459;139.706256" />') 
doc.at('//meta[@name="geo.position"]')['content'] # => "35.667459;139.706256"