mb2nd의 설명을 명확하게하기 위해 각 블록이 배열을 잘못 참조하고 있습니다. 이 작업을해야합니다 :
clues.each do |clue|
doc.xpath("//td[text()=#{clue}]/following-sibling::td")
end
출력하려면 CSV로 캡처 된 데이터를 실행할 수 :
csv = ""
clues.each do |clue|
csv << doc.xpath("//td[text()=#{clue}]/following-sibling::td")
csv << ", " unless clues.last == clue
end
doc.xpath을 ("// TD [텍스트() = # {단서}]/다음 -sibling :: td ") 호출 끝에 .value가 필요할 수 있습니다?
참고 사항. 당신은 또한과 같이 배열을 채울 수 있습니다
clues = ['Operating system', 'Processors', 'Chipset']
편집을 당신은 각 XPath는 호출의 결과를 저장해야
(@ Ninja2K에서 마지막 코멘트 후). 다음은 작동 코드입니다.
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1%22"))
clues = ['Operating system', 'Processors', 'Chipset']
csv_text = ""
clues.each do |clue|
csv_text << doc.at_xpath("//td[text()='#{clue}']/following-sibling::td").text
csv_text << ", " unless clues.last == clue
end
puts csv_text
BTW. 이 기사가 유용 할 수도 있습니다. http://hunterpowers.com/data-scraping-and-more-with-ruby-nokogiri-sinatra-and-heroku/
출처
2012-07-17 14:46:29
gef
문제가 아니지만 배열 버전에서 텍스트 주위에 인용 부호가없는 경우 확실하지 않습니다. 그것을 변경해보십시오 :'... text() = '# {단서}'] ... '. – MrDanA
배열을 채우는 방법에 대해서는 명확하지 않지만 배열에서 개체 대신 배열에서 doc.xpath를 실행하는 것이 하나의 실수입니다. doc.xpath ("// td [text() = # {단서}]/following-sibling :: td") clues는 배열의 이름입니다. 나는 당신의 배열에있는 객체 인 doc.xpath ("// td [text() = # {clue_storage}/following-sibling :: td")라고 생각한다. – mb2nd