2012-04-14 7 views
0

私はHTML文書を解析し、そこからたくさんのものを読み込みます。問題はhtmlに複数のテーブルがあり、1つのテーブルだけに興味があることです。プラス私はいくつかの有用なコンテンツを持っている行だけを読んでみたい。ここではサンプルのhtmlページですが、IDのない2つのテーブルがあり、私は2番目のテーブルだけを必要とし、人間にとって有用なラインだけを必要とします。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は私が望むテキストではありません。それは両方のテーブルを含み、私は2番目のテーブルだけを必要とします。助けて!

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

ありがとうございました! ( html_doc =鋸山:: HTML: は '必要 '縁石' は C =カール:: Easy.perform( "//server/cgi-bin/page.cgi ID = 123456?のhttp") '鋸山' 必要 html_doc.xpath( "// table [2]/tr/td/text()") ' –

答えて

0

//table[2]/tr/tdのxpathを試してみましたか? HTMLのソースを変更できる場合は、テーブルのID属性を指定するのが最善の方法です。

+0

ありがとうございました。 'html_doc.xpath(" // table [2]/tr/td/text() "'それは働いていますが、テーブルから個々の行を得るにはどうすればいいですか? \ n。 –

+0

どのようにmysqlに追加する前に改行を維持するのですか? –

+1

'text()'を呼び出す代わりに、nokogiriノードで 'inner_html()'を呼び出すことができます。しかし、各td要素のinner_html。 – krock

関連する問題