2011-10-17 2 views
-1

주어진 xpath의 실제 값을 얻으려고합니다. 나는nokogiri 또는 hpricot을 통한 화면 긁기

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 
doc = Nokogiri::HTML(open('http://www.changebadtogood.com/')) 
desc "Trying to get the value of given xapth" 
task :sample do 
    begin 
    doc.xpath('//*[@id="view_more"]').each do |link| 
     puts link.content 
    end 
    rescue Exception => e 
    puts "error" 
    end 
end 

출력이 sample.rb 파일에 다음 코드를 데 :

더보기 문제 ..

내가 다른 값을 얻을 때 다른 XPath와 같은 :
/html/body/div[4]/div[3]/h1/span 그럼 "오류" 메시지가 나타납니다.

나는 노코 기리에서 이것을 시도했다. 왜 이것이 XPath만으로는 결과를 얻지 못하는지 나는 알 수 없다.

나는 Hpricot에서 같은 것을 시도했다.
http://hpricot.com/demonstrations

내 URL과 XPath를 붙여 나는
//*[@id="view_more"]
보기
같은 더 문제에 대한 결과를 볼 ..

[이 텍스트는 최근 문제의 하단에 존재하는 헤더]

에 대한 결과가 표시되지 않습니다.
/html/body/div[4]/div[3]/h1/span 이 XPath에 대한 결과는 Bad입니다.
[이 클래스 = "영웅 유닛"DIV의 처음 헤더로서 http://www.changebadtogood.com/ 존재했다.]

+1

여기에는 많은 문제가 있습니다. 오류가 발생하는 코드는 포함시키지 않았습니다. 오류를 잡아 내고 '오류'를 인쇄하면 어떤 장점이 있습니까? 디버깅 할 수 있도록 오류가 발생하도록하십시오. 그리고 질문을 게시하기 전에 들여 쓰기를 수정해야합니다. – pguardiario

+0

그리고 14 개의 질문을하고 아직 하나의 대답을 수락하지 않았습니다. 아래 질문에 답변했지만, [이전에 질문했던 질문] (http://stackoverflow.com/users/792302/vinothini)을 다시 방문하여 각 질문에 가장 적합한 대답을 찾습니다 (if any)를 선택하고 승인하십시오 (체크 표시를 클릭하십시오). – Phrogz

답변

2

내 문제 불량의 XPath 셀렉터 할 가지며, 노코 기리 또는 Hpricot을 무관하다. 의 조사 보자이에서

irb:01:0> require 'nokogiri'; require 'open-uri' 
#=> true 
irb:02:0> doc = Nokogiri::HTML(open('http://www.changebadtogood.com/')); nil 
#=> nil 
irb:03:0> doc.xpath('//*[@id="view_more"]').each{ |link| puts link.content } 
View more issues .. 
#=> 0 
irb:04:0> doc.at('#view_more').text # Simpler version of the above. 
#=> "View more issues .." 
irb:05:0> doc.xpath('/html/body/div[4]/div[3]/h1/span') 
#=> [] 
irb:06:0> doc.xpath('/html/body/div[4]') 
#=> [] 
irb:07:0> doc.xpath('/html/body/div').length 
#=> 2 

우리는 두 <body> 요소의 자녀 된 div 등 div[4] 하나를 선택하지가 있음을 알 수있다.

당신이 여기 스팬 선택하려고하는 것으로 나타납니다

<h1 class="landing_page_title"> 
    Change <span style='color: #808080;'>Bad</span> To Good 
</h1> 

대신이 (색인 요소의 익명 계층)에 이르기까지의 깨지기 쉬운 마크 업에 의존, 문서의 의미 구조를 사용을 선택기가 더 간단하고 강력하다는 장점이 있습니다. CSS 또는 XPath 구문 사용 :

irb:08:0> doc.at('h1.landing_page_title > span').text 
#=> "Bad" 
irb:09:0> doc.at_xpath('//h1[@class="landing_page_title"]/span').text 
#=> "Bad" 
+0

고맙습니다. .....Phrogz 이 정보는 나에게 매우 유용합니다. – vinothini