2017-03-15 6 views
-1

나는 그럴 때마다 루프가 반복 될 때마다 특정 값 (td [0]) 중 8 개를 얻지 못합니다. 나는 내가 온라인에서 보았던 것에 대해 조사했지만 분명히 틀렸다.Nokogiri를 사용하는 동안 루핑하는 동안 td 항목의 사본 8 개가 있습니다.

'테이블'은 일부 Nokogiri html 경로와 관련 있다고 가정합니다. 나는 첫 번째 td (위치 0, td [0])의 내용을 tr 안에 넣으려고한다.

result = [] 
table.search('tr').map do |row| 
    row.search('td').each do |td| 

    result.push(row.search('td')[0].text.to_s) 

end 
end 

puts result 

각 tr에서 [0] 위치의 데이터 만 원할뿐입니다. 대신, 나는 각 tr에 대해 td [0]의 8 개의 사본을 얻고있다. 내가 생각하는 명백한 것을 놓치고 있는데, 뭐라구?

+1

"[mcve]"링크 된 페이지를 포함 "[질문]"읽어주세요. 이런 종류의 질문에 대해 질문 할 때는 예상되는 출력과 함께 문제를 설명하는 데 필요한 최소한의 입력 데이터 (HTML)가 필요합니다. 그것없이 우리는 입력이 어떻게 보일 것인가를 알아 내려고 노력해야합니다. 입력이 잘못되었을 때 출력을 검사 할 수 없다면 대답은 잘못입니다. 또한 텍스트 형식에 대한 도움말을 읽어보십시오. 텍스트 형식을 올바르게 지정하면 우리가 말하는 내용을 훨씬 쉽게 이해할 수 있습니다. Hey Diodon. –

답변

-1
result = [] 
table.css('tr').each do |row| 
    result << row.css('td')[0].text if row.css('td')[0] 
end 

문제는 매우 간단합니다. 일부 행에는 td가 전혀 없을 수도 있습니다. 그래서 #text를 호출하기 전에 td가 있는지 확인해야합니다.

당신이 #map 사용하여 선호하는 경우 :

result = table.css('tr').map do |row| # map returns array of results 
    row.css('td')[0].text if row.css('td')[0] 
end.compact # compact deletes all the nil elements from array 
+0

. 응답 주셔서 감사합니다! 나는 그것을 시도했지만, nil을위한 정의되지 않은 메소드 텍스트를 얻는다 : NilClass. 네가 옳아. 나는 단지 매핑 된 행을 취할 수 있어야하며, 위치는 지정할 수 있지만 주사위는 할당 할 수 없습니다. –

+0

수정 사항을 추가했습니다. 좀 봐 주 시겠어요? – DiodonHystrix

+0

안녕하세요. 나는 그것을 조사 할 것이다. 그러나 나는 열을 점검했다. 그리고 그들은 모두 tds를 가지고있다. 나는 너를 새롭게 할거야. –