2011-11-15 27 views
1

我想用xpath中的Nokogiri從HTML中的位置抓取數據。我使用XPath是:有什麼特別的考慮使用xpaths使用HTML抓取?

/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2] 

中的XPath點:

<td class="anatxt" nowrap=""> CELL TXT DATA <div id="div0" style="visibility: hidden; position: absolute"> 

代碼很簡單:

#!/usr/bin/ruby -w 

require 'rubygems' 
require 'nokogiri' 

page1 = Nokogiri::HTML(open('test1.html')) 

a = page1.xpath("/html/body/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]").text 
p a 

它與其他短路徑,但它只返回""爲這個具體情況。

爲什麼會發生這種情況?我錯過了什麼,或者是否有一些有趣的Nokogiri行爲由於一些錯誤?任何指針都是受歡迎的。

+1

您可以發佈一些(完整)示例標記供我們進行實驗嗎?如果它很長,請點它。 https://gist.github.com/ – d11wtq

+2

不,沒有什麼特別的考慮,除了你的XPath看起來異常脆弱。如果可能的話,你應該在頁面的更多語義方面(比如'id'和'class'屬性)。正如@ d11wtq所說的,您需要向我們展示一個使用XML的真實例子。 – Phrogz

+0

感謝人!它實際上是mozilla添加的'tbody'標籤,它本來不是。它工作,如果你從xpath中刪除它 – tengee

回答

4

tbody標記可能實際上並不存在。 有些瀏覽器會在它們不在時添加它們,但Nokogiri不會。

+0

我也有這個問題。你可以在這裏看到我的堆棧溢出問題:http://stackoverflow.com/questions/7540506/ff-xpather-to-nokogiri-can-i-just-copy-and-paste –

+0

正確,一些瀏覽器添加'tbody '那就像紅鯡魚一樣。在構建XPath訪問器時,最好查看源文本,而不要依賴瀏覽器來生成訪問器。 –

+0

刪除'tbody'標籤起作用。該死的瀏覽器(在這個特定情況下是mozilla)!謝謝pguardiario :) – tengee