2012-04-14 3 views
0

나는 거기에서 물건을 분석하고 읽을 수있는 HTML 문서가 있습니다. 문제는 html에 여러 테이블이 있고 하나의 테이블에만 관심이 있다는 것입니다. 또한 유용한 내용이 담긴 내용 만 읽고 싶습니다. 다음은 샘플 HTML 페이지입니다. ID가없는 두 개의 테이블이 있으며, 두 번째 테이블과 사람에게 유용한 행만 원합니다.루비 - 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

알았습니다! ( html_doc = 노코 기리 :: HTML : 는 '필요'커브 '는 C = 컬 :: Easy.perform ("//server/cgi-bin/page.cgi ID = 123456? HTTP")'노코 기리 '필요 c.body_str.to_s) 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에 추가하기 전에 linebreaks를 유지하려면 어떻게해야합니까? 'text()'를 호출하는 대신 –

+1

을 호출하면 nokogiri 노드에서 inner_html()을 호출 할 수 있습니다. 그러면 원시 텍스트가 전달됩니다. inner_html 각 td 요소에. – krock