마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

HTML 관련 Parsing 하려는데 너무 힘듭니다.

0 추천

 

일단 Jericho 파서를 이용하고 있습니다.

일단 기본적으로 table 타고 들어가서 값을 꺼내오는 부분은 간단하게 합니다.

 HTML 소스 보기 한 다음 있는거 그대로 퍼오는게 파싱의 일이니깐요ㅠ

 

그런데 문제는!!!!

view-source:http://m.gbis.go.kr/search/StationArrivalTvItem.do?osInfoType=M&routeId=234000313&routeName=&routeType=&districtCd=&routeRegionName=&mobileNo=&mobileNoSi=&stationId=228001427

버스 정보인데 들어가보시면

function setArrivalItem(data) 자바 스크립트로 짜여진 부분이 있습니다.

predict1 = "<span class=\"red\">"+data.estTime1+"</span>분 후 도착 예정(<span class=\"red\">"+data.locationNo1+"</span>번째 전 정류소 출발)";

이런 식으로 되어 있는데 해당은 jericho 파싱으로 가져오기도 힘들고

저 부분을 따로 HTML 문서상 숫자를 박아 넣는 부분도 없습니다.

 

어떻게 해야 될지 막막합니다.

혹시 파싱에 대해 아시는 분 답변 부탁 드립니다.

크이쥰 (120 포인트) 님이 2015년 6월 15일 질문

2개의 답변

+1 추천

아래쪽에 해당관련한 부분은 뽑아 봤습니다만...

이거 경기도 버스 정보서비스내요 ?  url따라가보니...

공공정보서비스이고 해당 사이트를 이용할수 있는 open api가 있내요.

물론등록하셔야하지만

http://www.gbis.go.kr/gbis2014/publicService.action?cmd=openApiInfo 여기보시고 여기서 제시하는 방식으로 접근하시길 추천해드립니다.

--

$.get("../search/getBusStationArrivalItem.do", $("#routeFrm").serialize(), function(data) {
     
        if(data.header['rtMsg'] == "Success"){
         if(data.busStationArrivalInfo != ''){
             if(data.busStationArrivalInfo.resultCode=='0' || data.busStationArrivalInfo.resultCode=='4'){
              setArrivalItem(data.busStationArrivalInfo);
             }
         }
        }else{
         alert(data.header.rtMsg);
        }
        hideLoading();
     
    }, 'json'); 
--

컴러기 (22,230 포인트) 님이 2015년 6월 16일 답변
현재는 공공데이터포털로 해당 알려주신 Open Api를 사용하고 있습니다.

다만 QnA 해당 경기도 버스 정보에도 올렸지만 사이트와 Open Api가 주는 정보가 달라서 일단 HTML 파싱을 겸사겸사 해보려고 하고 있습니다.
불법적으로 해당을 앱에 적용하려는 생각은 없습니다.

제가 단순 HTML 파싱만을 알고 있습니다. URL을 넣고 나온 HTML 소스에서
Table이나 Tb Tr span 등의 값을 가져오는 것입니다.

이렇게 JavaScript가 들어간 HTML 소스인 경우에는 어떤 식으로 접근해야 할지
막막합니다. 별다른 예제도 없어서 더 막막합니다.

주소 URL에 해당 JS를 사용하는 것에 쿼리 값을 넣으면 된다는 것인가요??ㅠ
이거 현제 파일에서 도착정보를 알려주는 처리는 ../search/getBusStationArrivalItem.do 라는 페이지에서 하고 있습니다. 저 파일이 크이쥰님이 알고자하는 정보를 만들어주는 페이지입니다. json으로 처리되는 것 같습니다. 보통 .do는 컴파일된 jsp일 확률이 높은데요.
저렇게 getBusStationArrivalItem.do에 접근해서 data정보를 읽어 올수도 있구요.
아니면 파싱작업에서 javascript를 수행가능하게 하는 방법이 있는지 살펴보는 것입니다.
javascript가 수행이 완료된 것을 파싱하면 정상적인 값으로 보이겠지요.

아무튼 이런식으로 따라가는 것은 별로 추천은 드리고 싶지 않습니다.
제가 잠시 보았을때 해당 페이지는 공공서비스용 페이지이고 따라서 저 페이지를 직접 앱이 억세스 하는것은 크이쥰님이 의도 하지 않았다고 하더라도 잘못하면 DOS공격을 일으킬 수 있습니다.
0 추천
저 값을 가져오는 *.js 파일 찾아서 거기다 쿼리 넣고 그 결과를 파싱해야죠....

json으로 온다면 쉽고...아니면 html처럼 노가다해야죠.
익명사용자 님이 2015년 6월 15일 답변
.js 파일은 따로 보이지 않고 해당 페이지 내에 이미 상기 내용의 function이 구현이 되어 있습니다. 그 안에서 처리가 되어서 가져오는 것으로 보이는데;;;

딱히 감이 안 오네요.
자체 계산을 하더라도 애초에 그 계산을 위한 값이 있겠죠. 그걸 파싱하면 될듯.
잘 찾아봐요. 있음.
setArrivalItem를 어디서 호출하는지...

그런데, 남의 사이트 파싱하는건 사전에 허락을 구하지 않으면 저작권법 위반이 됩니다. 학교 숙제면 모를까, 앱 낼거면 어차피 차단당해요. 아니면 저작권 침해 신고 들어와서 닫던가.
저도 불법적으로 데이터 도용을 할 생각은 없습니다.
단지 해당 사이트에서 주는 정보와 데이터포털 쪽에서 주는 정보가 달라서
시험 삼아 HTML 파싱을 하려고 하는데요.

javascript를 어떻게 파싱해올지 문제네요.
제가 이해력이 부족하고 이런 예제도 없네요ㅠㅠ

Js 관련 페이지의 URL에 쿼리 값을 만들어서 넣어주면 된다는 말씀이신가요??
js 파일을 이용해서 해당 URL에서 만드는 것 같은데 막막합니다.ㅠㅠㅠㅠㅠ
...