2012-07-13 90 views
1

我是Ruby和Xpath的新品牌。我需要在從表格中提取數據

http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1

到目前爲止,我已經嘗試針對所有的TD標籤,頁面沒有使用CSS ID來提取表中的系統特點,所以我不能瞄準的方式。

我嘗試下面的代碼

doc.xpath('//tr/th/span[normalize-space(text())="System features"]/..') 

但它沒有返回值;(

沒有人有任何想法,以接近這一點的最好辦法

回答

0

該表達式應該工作在給定的罰款?來源,但它不是真正的慣用,你可能想要使用更類似這樣的東西:

//tr/th[span[normalize-space()='System features'] 
  1. normalize-space需要一個字符串參數。通過由text()返回的節點集,通過以文檔順序獲取第一個文本節點,強制轉換爲字符串。這在文檔中並不重要,因爲只有一個子文本節點,但您應該知道這是發生了什麼。
  2. 您不需要在表達式末尾使用/..回溯樹。您可以使用嵌套謂詞測試兒童span的存在,從而直接選擇所需的th

如果你想利用目標th僅包含一個子span節點的事實,你可以寫這樣簡單表示:

//tr/th[normalize-space(span)='System features'] 

那麼,爲什麼不工作?很難說,但這可能是因爲您用來分析文檔的工具創建的結構與其在文本源中的顯示方式不同(例如,因爲輸入的格式不是很好的XML)。嘗試一個稍微不同的表達:

//*[span[@class='themebody' and normalize-space()='System features']] 

或者,也許你應該首先確認您可以檢索span本身,然後從構建表達了起來:

//span[@class='themebody' and normalize-space()='System features'] 
+0

感謝您的答覆,但是當我運行第二個最後的代碼段我得到了irb(main):406:0 * <'// * [span class ='themebody'and normalize-space()='System features']]') SyntaxError:(irb ):407:syntax error,unexpected tIDENTIFIER,expect')' ... ath('// * [span class ='themebody'and normalize-space()='Syst ... ...^ (irb):407:語法錯誤,意外的tCONSTANT,期望$ end ...'和normalize-space()='系統功能']]') ...^ from C:/Ruby193/bin/irb:12:在'

' – Ninja2k 2012-07-14 01:51:05

+0

@ Ninja2k - 我在表達式中使用單引號,但是您也使用單引號將*表達式包圍。你不能在兩個中使用單引號。只需在其中一個或另一個切換到雙引號。 – 2012-07-14 03:54:11

+0

非常感謝,因此我添加了doc.xpath(「// * [span [@ class ='themebody'and normalize-space()='System features']]」),然後看起來像輸出Nokogiri數組?我可以補充。文本輸出,它給了我第一個值「系統功能」,我怎樣才能得到其餘的值? – Ninja2k 2012-07-14 10:40:58