2010-10-27 78 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"