2015-02-07 2 views
0

호주 정부 웹 사이트에서 제공 한 1 년분의 온도 데이터를 나타내는 this HTML table을 구문 분석하려고합니다.시간을 나타내는 HTML 테이블을 어떻게 파싱합니까?

이 표는 비정상적인 방법으로 설정됩니다. 열은 월이고 행은 일입니다 (첫 번째 행의 셀은 JAN 1, FEB 1, MAR 1입니다). 각 셀에는 해당 날짜에 대해 기록 된 데이터가 있으면 숫자가 기록되고 데이터가 기록되지 않으면 빈 셀이 표시되고 하루가 존재하지 않으면 셀 클래스 notDay (예 : 2 월 31 일)이 포함됩니다. 간단한 또는 방법 (프로그래머 효율의 측면에서) 가장 효율적이 얻을 수있는 테이블을 구문 분석하는 것이 무엇 :

내 의도는

DATE   RAINFALL  MAX TEMP 
2015-02-07  35    31 
2015-02-07  40    17 

내 질문은 형식이 데이터의 전체 데이터베이스를 구축하는 것입니다 사용할 수있는 형식으로 데이터를?

저는 개인적으로 Nokogiri 라이브러리와 함께 Ruby를 사용하고 있습니다 만, 일반적인 비 언어 관련 알고리즘/접근 방법에 대한 조언은 더 좋은 토론을 만들면 환영합니다. 나는 코드를 작성하고 문제를 해결할 사람을 찾고있는 것이 아니라 접근 방법에 대한 조언을 구합니다.

들이 나타나는 순서에있는 모든 세포를 가지고 :

+0

페이지 상단에 이미 CSV 형식의 매우 동일한 데이터가 포함 된 zip 파일을 제공한다는 사실을 알고 계실 것입니다. – CBroe

+0

@CBroe 나는하지 않았다. 그리고 나는 지금 정말로 어리 석다. 그래도 지적 해 주셔서 고마워요. 어쨌든 질문을 떠날 것입니다. 왜냐하면이 같은 구문 분석 방법은 유용한 정보가 될 수 있습니다. 여기가 불필요한 경우에도 마찬가지입니다. – GreenTriangle

+0

D' oh! 소스 페이지를 방문한 적이 없습니다. Lesson, kids : HTML 스크랩을 시작하기 전에 더 나은 형식으로 데이터를 사용할 수 있는지 확인하십시오. – Satya

답변

1

난 당신이 할 수있는 경우 궁금 당신은 배열의 배열 상황을 가지고있는 경우에

  • 사용 Array#flatten. ...

    (Date.new(2014,1,1) .. Date.new(2014,12,31)).each {...} 
    

    그리고 거기에서 이동 :

는 날짜 범위를 사용하여 모든 관련 기간에 걸쳐 Array#reject

으로 반복 어떤 notDay 세포를 삭제 하시겠습니까?

+0

영리하고 단순하다. 나는 그것에 대해 생각하지 않았을 것이다! – GreenTriangle