2011-04-13 1 views
4

Nokogiri가 제대로 작동하는 데 문제가 있습니다. Ruby 1.9.2에서 1.4.4 버전을 사용하고 있습니다.Nokogiri - XML과 함께 작동하므로 HTML이 많지 않음

libxml2 libxslt가 설치되어 있고 최신 상태입니다. XML을 사용하여 Ruby 스크립트를 실행하면 훌륭하게 작동합니다. ruby test.rb 실행

require 'nokogiri' 

doc = Nokogiri::XML(File.open("test.xml")) 
doc = doc.css("name").each do |node| 
    puts node.text 
end 

카스티에 입력

Name 1 
Name 2 
Name 3 

반환 그리고 군중 야생 간다. 내가 몇 가지를 조정할,

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open("http://domain.tld")) 
doc = doc.css("p").each do |node| 
    puts node.text 
end 

돌아 가기 CL, ruby test.rb에, 반환 ... 아무것도 ... 코드에 약간의 조정을! 그냥 새로운 빈 줄.

XML 파일에는 사용할 수 있지만 HTML에는 사용할 수없는 이유가 있습니까?

+0

일부 디버깅 질문 : 각 블록의 반복 검사 여부를 확인 했습니까? 거기에'puts 1 '을 추가하면 문제가'p' 노드를 얻거나 그것을 채우는 데 있는지 알려줄 것입니다. 또한 문서가 채워지는지 확인 했습니까? 이 정보는 문제를 파악하는 데 도움이됩니다. –

+0

다음은 "멍청한"질문입니다 ... 의사가 게시되는지 어떻게 알 수 있습니까? 'puts node.text'를'puts 1'으로 바꿨고 어떤 출력도 얻지 못했습니다. – werm

+0

'puts doc'을 할 수 있으며'doc'가 nil인지 아닌지를 알려줍니다. –

답변

5

이 종류의 문제를 디버깅하려면 추가 정보가 필요합니다. 당신은 작동하는 URL을 제공하지 않기 때문에, Nokogiri가 이런 종류의 문제에 대해 잘 작동한다는 것을 알고 있기 때문에, 디버깅이 당신에게 달려 있습니다. IRB에서

: 여기

내가 테스트를 어떻게 할 것인지의

  1. 당신은 당신이 할 때 출력을받을 수 있나요 : 그 유효한 문서를 반환하는 경우 open('http://whateverURLyouarehiding.com').read
  2. , 당신은 때를 어떻게받을 수 있나요 이전 열린 문을 Nokogiri::HTML(...)에 래핑하십시오. 따라서 이전 줄에 .read을 보존해야하므로 Nokogiri는 IO 스트림이 아니라 페이지 본문을 수신합니다.
  3. 위의 2 번을 시도하고 .read을 제거하십시오. 그것은 Nokogiri가 IO 스트림을 읽는 데 문제가 있는지를 말해 줄 것입니다. 비록 내가 항상 사용하고 있기 때문에 문제가 있다는 것을 심각하게 의심합니다. 그 시점에서 나는 당신의 시스템에 문제가 있다고 생각합니다.
  4. # 2 및 # 3에서 문서를 가져 오는 경우 문제는 접근 자에있을 수 있습니다. 네가 찾고있는 것이 존재하지 않는다고 생각한다.
  5. 존재할 경우 Nokogiri가 문서를 구문 분석 한 후 doc.errors의 값을 확인하십시오. 문서에서 오류를 발견 할 수 있으며, 그렇다면 오류를 발견 할 수 있습니다.
+0

URL을 가지고 IRB에서 테스트를 수행 할 때마다 다음과 같이 되돌아 왔을 것입니다. 'Errno :: ENOENT : 해당 파일이나 디렉토리가 없습니다 - http://columbus.craigslist.org/pho/ from (irb) : 1 : 1 : '열기'에 (IRB)로부터 /usr/지방/빈/IRB 1 : 12 : "

"로' 을 그러나, I가 장난 하였다 (IRB)로부터 '초기화'에서 주위에 어떤 코드를 주석 처리했습니다. 'doc = Nokogiri :: HTML (open ("http : // any-url")) puts doc' doctype과 첫 번째 인스턴스를 반환합니다. '' – werm

+1

첫 번째 오류는 'open'을 요구하지 않았기 때문입니다. Open-URI는 URL을 어떻게 처리해야하는지 이해하기 위해 'open'을 수정합니다. –

+1

'puts doc'의 결과는 두 줄 밖에없는 경우 전체 문서를 다시 얻지 못하는 것처럼 보입니다. # 1과 # 2를 다시 시도하십시오.하지만 URL을 열기 전에'require 'open-uri''을 입력하십시오. 그리고, 나는 Nokogiri와 Open-URI를 사용하여 음악 장비에 대한 craigslist를 항상 치며 작동합니다. 나는 오늘 밤 집에 올 때 더 자세히 살펴볼 것입니다. –