2013-04-14 59 views
3

我需要從網頁解析表格。在使用Ruby和Nokogiri之前,我已經完成了這個工作,但是這次我的方法不起作用。這是我在做什麼:Nokogiri在執行XPath搜索時沒有返回任何內容

response = RestClient.get "http://www.webpage.com?page=0" 
doc = Nokogiri::HTML(response.body,nil,'utf-8') 
doc.remove_namespaces! 
table = doc.xpath(".//*[@id='contsinderecha']/form/table/tbody/tr[4]/td/table/tbody/tr[5]/td/table") 

table只是一個空的數組。答案很好,如果我做了put response.body我得到了網頁的正文。

此外,要獲得XPath,我正在使用螢火蟲。

任何想法可能發生什麼?

+0

除了XPATH看起來相當長(在對方3個表,它是一個表設計?),我在你的代碼中看不到任何明顯的錯誤。您的頁面的HTML(或URL)將有所幫助。 – tessi

+0

感謝您的反饋..這裏是網址:http://www.buenosaires.gob.ar/areas/seguridad_justicia/​​seguridad_urbana/estaciones_servicio/buscador.php?&pag=0 – Andres

+0

也許這StackOverflow問題有助於解決您的問題問題:http://stackoverflow.com/questions/9156650/why-does-this-nokogiri-xpath-have-a-null-return?rq=1 – tessi

回答

6

解決您的問題的方法是在xPath中刪除tbody部件,如「Why does this Nokogiri XPath have a null return?」中所述。

Firefox爲您生成了tbody元素,這就是它們出現在Firefox的xPath中的原因,但它們不是原始頁面源的一部分。

嘗試以下操作:

response = RestClient.get "http://www.buenosaires.gob.ar/areas/seguridad_justicia/seguridad_urbana/estaciones_servicio/buscador.php?&pag=0" 
doc = Nokogiri::HTML(response.body,nil,'utf-8') 
doc.remove_namespaces! 
table = doc.xpath(".//*[@id='contsinderecha']/form/table/tr[4]/td/table/tr[5]/td/table") 
3

正確的方式來獲得在該表是:

doc.at('table.contenido') 
+1

針對CSS訪問器的+1。 –

相關問題