2012-07-17 2 views
1

나는이 약 30 그래서 나는 어쩌면 그것이 작동하지 배열 만 사용할 수 생각이XPath와 배열

doc.xpath("//td[text()='Operating system']/following-sibling::td") 
doc.xpath("//td[text()='Processors']/following-sibling::td") 

을 다음과 같이 코드를 사용하여 텍스트, 웹 페이지를 긁어하고, 여기에 내 코드입니다

clues = Array.new 
clues << 'Operating system' 
clues << 'Processors' 
clues << 'Chipset' 

clues.each do |clue_storeage| 
doc.xpath("//td[text()=#{clues}]/following-sibling::td") 
end 

루프에 배열을 공급 한 다음 출력 할 수있는 방법이 있습니까?

+0

문제가 아니지만 배열 버전에서 텍스트 주위에 인용 부호가없는 경우 확실하지 않습니다. 그것을 변경해보십시오 :'... text() = '# {단서}'] ... '. – MrDanA

+4

배열을 채우는 방법에 대해서는 명확하지 않지만 배열에서 개체 대신 배열에서 doc.xpath를 실행하는 것이 하나의 실수입니다. doc.xpath ("// td [text() = # {단서}]/following-sibling :: td") clues는 배열의 이름입니다. 나는 당신의 배열에있는 객체 인 doc.xpath ("// td [text() = # {clue_storage}/following-sibling :: td")라고 생각한다. – mb2nd

답변

0

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/

+0

Ok 입력 함 clues.each do | clue | doc.xpath ("// td ... [text() = '# {단서}']/following-sibling :: td") 끝이고 => [ "운영 체제", "프로세서" "칩셋"]하지만 그 xpath 조각을 입력하려면 배열 값이 필요합니다 – Ninja2k

+0

그래서 doc.xpath ("// td /following-sibling :: td") – Ninja2k

+0

을 삭제하십시오. # {단서}가 아닌 # {단서} – gef

관련 문제