2012-04-14 78 views
0

我有一個HTML文檔解析並從那裏讀取一堆東西。問題是html中有多個表格,我只對一個表格感興趣。另外,我只想閱讀一些有用的內容。這裏是示例html頁面,有兩個沒有ID的表格,我只需要第二個表格,而且只需要對人類有用的行。Ruby - nokogiri - 只解析特定的html表格

<HTML> 
<BODY> 

<TABLE> 
    <TR> 
    <TD> I don't want this table </TD></TR> 
    <TR> 
    <TD></TD> 
    <TD> No No No <br></TD> 
    </TR> 
.... 
</TABLE> 


<TABLE> 
    <TR> 
    <TD>04/13/2012 22:51 I want this table </TD></TR> 
    <TR> 
    <TD></TD> 
    <TD> First - something there <br></TD> 
    </TR> 
    <TR> 
    <TD>04/13/2012 23:23 Update from xyz</TD></TR> 
    <TR> 
    <TD></TD> 
    <TD>Second - something here <br></TD> 
    </TR> 
</TABLE> 


</BODY> 
</HTML> 

我想這個代碼,顯然不工作。 o/p不是我想要的文字。它包括兩個表格,我只想要第二個表格。幫幫我!

require 'curb' 
require 'nokogiri' 
c = Curl::Easy.perform("http://server/cgi-bin/page.cgi?id=123456") 
html_doc = Nokogiri::HTML(c.body_str.to_s) 
puts html_doc.xpath("//table/tr/td") 
+0

知道了! 'require'curb' require'nokogiri' c = Curl :: Easy.perform(「http://server/cgi-bin/page.cgi?id=123456」) html_doc = Nokogiri :: HTML( c.body_str.to_s) puts html_doc.xpath(「// table [2]/tr/td/text()」)' – 2012-04-14 07:06:06

回答

0

您是否嘗試過//table[2]/tr/td的xpath以獲取第二個表。如果您可以更改HTML的來源,最好的解決方案就是爲您的表提供id屬性。

+0

謝謝。 'html_doc.xpath(「// table [2]/tr/td/text()」'得到了它的工作,但是我怎麼從表中得到單獨的行呢?我希望這個東西在頁面中使用mysql \ r或者\ n。 – 2012-04-14 07:50:22

+0

在添加到mysql之前,如何維護換行符? – 2012-04-14 07:56:57

+1

而不是調用'text()',您可以在nokogiri節點上調用'inner_html()',它只會給你內部的原始文本。儘管每個td元素都有inner_html。 – krock 2012-04-14 10:07:48