[비베] Parsing 기초부터 Web Parsing
컨텐츠 정보
- 1,552 조회
본문
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번의 소스에서 약간만 수정하면 된다능(됩니다).
네이버 인기검색어순위를 추출해보겠습니다.
일단 추출할 부분이 소스에 어떻게 위치하는지 분석해보겠습니다.
일단 브라우저로 접속해 소스를 띄위줍니다.
그리고 현재 인기검색어를 봐줍시다.
"나름가수다"를 소스에서 찾아 보겠습니다.
그러면 이렇게 보니
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위 부터 순서대로 메세지가 뜨는것을 볼수 있습니다.
관련자료
-
이전
-
다음