'parsing'에 해당되는 글 1건

  1. 2007.03.31 Html 파싱... 2

Html 파싱...

MFC/TIP 2007. 3. 31. 13:59




내용에 비해서 제목이 거창하다;;;

Html 파싱이라고 해서 특별한 방법을 설명하는것은 아니고 그냥 특정 게시판에서 자신의 원하는 데이터를 얻는 정도를 설명하려고 한다.

Html 파싱은 완전히 노가다이다...그래서 그런지 샘플소스 또한 완전 하드코딩이다 -_-;

샘플소스의 작동원리를 간단히 설명하면 아래와 같다.

1. 파싱할 웹페이지의 소스를 얻어온다.
2. 얻어온 소스를 CString 변수에 넣는다.
3. CString의 Find(), Mid(), Format() 함수 등을 이용해서 원하는 데이터를 얻는다.

간단하게 소스로 표현하면 아래와 같다.
// CString m_strSource; -> 파싱할 웹페이지 소스
CString strTmp;
int nStart=0, nEnd=0

nStart = m_strSource.Find("검색어 1", nEnd);
nStart += (int)strlen("검색어 1");
nEnd = m_strSource.Find("검색어2", nStart);
strTmp = m_strSource.Mid(nStart, nEnd-nStart);

위의 "검색어 1"과 "검색어 2" 사이에 파싱할 데이터가 위치하면 된다.

Font 태그를 이용해서 아래와 같은 예제를 작성할 수 있다.
// "<Font color=red>얻을 데이터</Font>"

nStart = m_strSource.Find("<Font color=red>", nEnd);
nStart += (int)strlen("<Font color=red>");
nEnd = m_strSource.Find("</Font>", nStart);
strTmp = m_strSource.Mid(nStart, nEnd-nStart);

위와 같이 하면 strTmp에 최종값은 "얻을 데이터"가 된다.

위의 샘플 소스를 기준으로 약간의 응용을 통해서 while()문을 이용해서 게시판 글 목록수 만큼 데이터를 얻어올 수 있다.

위 코드의 문제점은 아무래도 하드코딩이다 보니 특정게시판에 대해서만 사용이 가능하고 "검색어" 부분을 잘 설정해야 한다...

위의 샘플코드에 썼던 Font 태크 같은 경우는 얻으려는 데이터 이외의 곳에서도 많이 사용되는 태그니 엉뚱한곳의 데이터를 얻어올 가능성이 있다.

그러므로 검색어 부분은 얻으려는 데이터와 관련되면서 유일하게 쓰인 명령어를 삽입해야 한다.

아래는 샘플소스의 파싱부분을 처리하는 소스이다.


검색어 부분을 보면 하드코딩이라는게 적나라하게 들어난다...실력이 부족하니 어쩔수 없을듯 하다...좀더 괜찮은 방법을 공부해봐야겠다...


아래는 샘플소스 스샷 & 원래 게시판 스샷
샘플소스

원래 게시판

(사용언어 및 제작툴 : MFC / VS2005)
Posted by Gungume
,