2011-03-30 2 views
0

은 내가 긁어하지만 그들 중 몇은 내가Nokogiri로 웹 스크랩하기 :: HTML과 Ruby - 당신이 찾고있는 것을 어떻게 처리 할 수 ​​있습니까?

undefined method `attribute' for nil:NilClass (NoMethodError) 

내 스크립트 오류를 ​​찾고있는 무슨 필요가 없습니다 할 페이지의 99 %를 작동하는 스크립트를 가지고 코드는 주위를 둘러 보거나 디버깅하는 것보다는 약간 추악하지만 여기서는 내가하고있는 일이다. 내가 이것을 감지하고 오류를 처리 할 수있는 방법

doc = Nokogiri::HTML(open(url)) 
image_link = doc.css(".entry-content img") 
temp = image_link.attribute('src').to_s 

노코 기리에 의해 반환되는 이미지 링크가 전무되지 않을 경우 오류의 경우에는 .entry-콘텐츠 IMG가 없기 때문에 오류가 세 번째 줄에 있고 단순히 ?

답변

6
doc = Nokogiri::HTML(open(url)) 
if image_link = doc.at_css(".entry-content img") 
    temp = image_link['src'] 
else 
    # Whatever else 
end 

또는 직접 속성 값을 얻기 위해하는 XPath 선택을 사용할 수

doc = Nokogiri::HTML('<div class="entry-content"><img src="bar"></div>') 
src = doc.at_xpath('//*[@class="entry-content"]//img/@src').to_s 
# src is "bar"; if the html didn't have such an item, it would be "" (nil.to_s) 
+0

작동하지 않습니다. 나는 그것을 시도했지만 nokogiri에서 반환 된 노드 집합은 0이 아닙니다. – srboisvert

+1

@srboisvert 제 사과; 'css' (일치하지 않는 경우 빈 노드 집합을 반환)를 at_css ('nil'을 반환)로 변경하는 것을 잊었습니다. 나는이 변화에 대한 해답을 편집했다. 그러나, 나는 당신이 노드 셋에 대해 틀렸다고 믿습니다. 나를 위해'doc.css ("foo bar"). 비어 있습니까? # => '입니다. – Phrogz

+0

사실 나는 비어 있다고 생각하니? Nodeset의 메소드가 트릭을 수행합니다. 당신은 내게 대답을주지 않았지만 당신은 내 뇌 혈전을 풀어 줬어. 감사. – srboisvert