2013-04-25 2 views
0

이 HTML을 기반으로 :Nokogiri를 사용하여이 HTML을 어떻게 파싱합니까?

<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li> 

은 내가 United Kingdom Agricultural Supply TradeAssociation(UKASTA) 문자열을 얻을합니다. "(UKASTA)"

linklist=link.parent.parent.css('li strong a') 
linklist.each do |f| 
    puts f.text 
end 

f.text

는 "영국 농업 공급 TradeAssociation"입니다, 하지만 어떻게합니까 :

는 노코 기리를 사용하여, 나는 썼다?

require 'nokogiri' 

html_doc = Nokogiri::HTML("<html><li><strong><a href="">United Kingdom Agricultural Supply Trade Association</a>(UKASTA)</strong></li></html>") 

html_doc.css('li strong').children[0].text 
=> United Kingdom Agricultural Supply Trade Association 
html_doc.css('li strong').children[1] 
=> (UKASTA) 

답변

3

당신이있는 거 다이빙을 너무 깊이에 :

2

당신은 위치에 따라 데이터를 식별 한 후 children 방법을 사용하고있다. 내가 사용하십시오 :

require 'nokogiri' 

html = '<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li>' 
doc = Nokogiri::HTML(html) 
doc.at('strong').text 

반환 :

"United Kingdom Agricultural Supply Trade Association (UKASTA)" 

당신이 <a> 노드를 찾을 수있는 경우에 액세스 할 수 있습니다 "(UKASTA)"를 사용하여 :

a_node = doc.at('a') 
a_node.text 
=> "United Kingdom Agricultural Supply Trade Association" 
a_node.next_sibling.text 
=> " (UKASTA)" 
+0

참고 경우 그 당신은 하나의 문자열로, 당신은 또한'html_doc.css ('강력한 리')을 할 수있는 결합합니다. 텍스트 '는'영국 농업 공급 무역 협회 (UKASTA)' –

+0

'.CSS ('리 강력한')를 얻을 수 있습니다. 아이들 [0]'은 어색한 방법입니다. 원하는 노드로 이동하십시오. 'css'는 Array와 비슷한 NodeSet을 반환합니다. 그런 다음 다른 배열이 될'children'을 말하고 나서 첫 번째 요소를 얻기 위해'[0]'을 말합니다. 대신'css '대신'at'를 사용하십시오. 이것은 노드 접근 최초로 출현을 반환하므로 단락 .CSS '('리튬 강한 '). 아이 [0]'좋게. –

+0

Thx, Tin Man. 항상 청소기/짧은 방법을 배우는 것이 좋다 ... – orde

관련 문제