게임강의

[비베] Parsing 기초부터 Web Parsing

컨텐츠 정보

본문


 



1. 파싱(Parsing)이란?



문자열중 원하는 부분만 뽑아내는 기술(?)을 의미함.

 



2. 파싱에 필요한 함수들 설명

 



Len함수



인자 : Len(문자열)

설명 : 문자열의 글자수를 반환.



예제 : Len("9876543210")

결과 : 10

 



Mid함수

인자 : Mid(문자열,뽑기시작할 글자수,그만 뽑을 글자수[입력안하면 끝까지 뽑음])

설명 : 문자열중 왼쪽에서 X번째부터 Y번째까지 추출할 때 필요.

예제1 : Msgbox  Mid("9876543210",5) ' "9876543210"에서 5번째 글자부터 끝까지 뽑음.



결과 : 543210



예제2 : Msgbox  Mid("9876543210",5,2) ' "9876543210"에서 5번째 글자부터 2글자 뽑음.



결과 : 54

 



Left함수

인자 : Left(문자열,문자열 왼쪽부터 뽑을 글자수)

설명 : 문자열중 왼쪽부터 오른쪽으로 X번째까지 추출할 때 필요.

예제 : Msgbox Left("9876543210",5) ' "9876543210"에서 왼쪽부터 5글자 뽑음.



결과 : 98765





Right함수

인자 : Right(문자열,문자열 오른쪽부터 뽑을 글자수)

설명 : 문자열중 오른쪽부터 왼쪽으로 X번째까지 추출할 때 필요

예제 : Msgbox Right("9876543210",5) ' "9876543210"에서 오른쪽부터 5글자 뽑음.



결과 : 43210

 



Split함수

인자 : Split(문자열,구분자)(인덱스)

설명 : 규칙적으로 반복되는 문자열중 구분되는 문자로부터 추출할 때 필요.

예제 : Msgbox Split("9,8,7,6,5,4,3,2,1,0",",")(1) ' "9,8,7,6,5,4,3,2,1,0"에서 ","을 구분으로 2번째 문자를 뽑음.(인덱스는 0부터 시작임.)



결과 : 8

 



Instr함수

인자 : Instr(문자열,찾을 문자열)

설명 : 문자열중 특정 문자를 찾아 그 위치를 반환함. 특정문자가 존재하지 않을 경우 0을 반환함.

예제 : Msgbox Instr("9876543210","7") ' "9876543210"에서 "7"이 있는 부분(앞쪽부터)을 찾아 그 위치를 반환



결과 : 3

 



3. Mid,Instr,Len함수 응용하기





Source = "<1>하나<0>둘<1>셋<0>"

Msgbox Mid(Source, InStr(Source, "<1>") + Len("<1>"), InStr(Source, "<0>") - Len("<1>") - 1)

'(1) Source에서 "<1>"이 있는 위치를 찾아 "<1>"의 뒤쪽부터 추출하기위해 "<1>"의 글자수를 더하고 그 부분부터

'(2) Source에서 "<0>"이 있는 위치를 찾아 "<0>"의 위치에서 "<1>"의 글자수를 빼준다.(사이의 글자수)

'거기서 1을 더 빼주는 이유는 Instr는  Instr("12345","1") 일때 0이 아닌 1로 반환해 주기 때문.

'Source에서 작업 (1)부터 (2)번째 까지 추출

설명 : "<1>하나<0>둘<1>셋<0>" 에서 앞부분부터 "<1>"이 있는 곳부터 "<0>"이 있는 곳 사이 문자열 추출.

결과 : "하나"

 



4. 반복해서 추출하기



3번 에서는 앞쪽에 있는 한개만 추출하였지만 이번엔 반복문을 통해서 모두 추출해 보겠습니다.


Source= "<1>하나<0>둘<1>셋<0>넷<1>다섯<0>"

Do while Instr(Source,"<1>") ' Source에 "<1>"이 있을경우 반복.



Source= Mid(Source, InStr(Source, "<1>") + Len("<1>")) 'Source에서 "<1>"의 위치 에서 "<1>"의 글자수를 더한 곳("<1>"의 뒤쪽)부터 끝까지 추출해서 Source에 대입.

Msgbox Left(Source, InStr(Source, "<0>") - 1) '위에서 대입한 Source에서 왼쪽부터 "<0>"의 위치만큼 추출해서 메세지 출력.



Loop '여기까지 반복


설명 : "<1>"에서 "<0>" 사이의 글자를 끝까지 계속 출력

결과 : "하나", "셋", "다섯"

 



5. 웹파싱



웹파싱이란 웹소스에서 필요한 부분만 뽑아오는 기술(?)을 의미함.


소스를 추출해 내는 부분은 Winhttp를 쓰던지 Inet을 쓰던지 Winsock을 쓰던지 상관없으므로

이 강좌에선 필자가 사용하기 비교적 편한 Winhttp를 쓰도록 하겠습니다.


4번의 소스에서 약간만 수정하면 된다능(됩니다).

네이버 인기검색어순위를 추출해보겠습니다.


일단 추출할 부분이 소스에 어떻게 위치하는지 분석해보겠습니다.


%C1%A6%B8%F1_%BE%F8%C0%BD2_0194982320.pn

일단 브라우저로 접속해 소스를 띄위줍니다.

%C1%A6%B8%F1_%BE%F8%C0%BD_0194982320.png

그리고 현재 인기검색어를 봐줍시다.

"나름가수다"를 소스에서 찾아 보겠습니다.
%C1%A6%B8%F1_%BE%F8%C0%BD3_0194982320.pn


그러면 이렇게 보니 


sm=top_lve" title="

부터

"

까지 반복해서 뽑으면 되겠습니다.


4번을 이용해 소스를 작성해 보면,


Winhttp.Open "GET", "http://naver.com"

Winhttp.Send


Source= Winhttp.ResponseText

Do while Instr(Source,"sm=top_lve"" title=""")



Source= Mid(Source, InStr(Source, "sm=top_lve"" title=""") + Len("sm=top_lve"" title="""))

Msgbox Left(Source, InStr(Source, """") - 1)



Loop


이렇게 됩니다.


출력값을 보면 1위 부터 순서대로 메세지가 뜨는것을 볼수 있습니다.


관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 등록자 벼배릅 등록일 04.14
알림 0