개인 자료란 (JE)

  서버 커뮤니티

Profile PGping 대표칭호 없음

PGping 61e952c381e949abb7f34bb4434d0569

Profile

커뮤니티 소통 개발하기 기타강좌

[오토핫키 강좌] 파싱에 대하여 (1)

2019.12.29 조회 수 793 추천 수 1

 

파싱 이란 특정 데이터에서 원하는 데이터를 뽑아내는 과정 이라고 생각하시면 됩니다.

정확한 뜻은 다른뜻이지만.. 오토핫키에서는 이정도만 생각하시면 됩니다.

 

먼저 한국마인크래프트포럼 이니 마인크래프트와 관련해서 파싱을 해보겠습니다.

서버 정보 사이트에서 그 서버의 현재 접속중인 인원을 파싱해오는걸 보여드리겠습니다.

 

모두들 아시는 마*리스트 에서 제가 플레이하는 서버의 현재 접속중인 인원을 파싱해보겠습니다.

 

아래는 파싱에 필요한 데이터를 가져오는 구문입니다.

winHttp := ComObjCreate("WinHttp.WinHttpRequest.5.1") 
winHttp.Open("GET","https://minelist.kr/servers/서버주소")
winHttp.Send("")               ; 전송 메소드
winHttp.WaitForResponse( )     ; 값이 올때까지 대기
 Data := winHttp.ResponseText   ; 받은 값을 Data변수에 대입

 

위에 구문에서 서버주소는 마*리스트에 있는 서버주소를 넣을시 그 주소의 html을 불러오게 됩니다.

이게 첫 발판이 되며 오토핫키에 있는 정규식으로 원하는 값을 따로 빼오게 됩니다.

 

정규식에 대한건 더 정확하게 다른 강좌글로 알려드리겠습니다.

 

 

필요한 값은 마*리스트에 있는 아래와 같은 위치를 보여주는 html로부터 가져옵니다.

위에 값을 크롬 F12를 통해 확인할시 아래와 같은 값이 나옵니다.

 

필요한건 '</font> '와 '명 접속중' 입니다.

아래와 같은 방법으로 할시 접속자만 빼올 수 있습니다.

RegExMatch(Data,"</font> (.*)명 접속중", user) ;정규식으로 파싱

 

위에서 Data는 불러온 html 코드이며 즉 사이트의 전체 html코드 입니다.

두번재 파라미터는 파싱할때 사용할 정규식인데 설명 드리자면

Data속 텍스트중 '</font> (.*)명 접속중' 으로 이루어진걸 가져오라는 뜻인데

여기서 (.*)은  </font> 와 명 접속중 사이에 뭐가 있던 가져오라는 뜻입니다.

다른 정규식을 사용할시 숫자만 가져와라 특수문자만 가져와라 등 여러가지가 가능합니다.

세번째 파라미터에 있는 user는 찾은 값을 대입할 변수입니다.

 

풀 코드를 적어드리겠습니다.

winHttp := ComObjCreate("WinHttp.WinHttpRequest.5.1") 
winHttp.Open("GET","https://minelist.kr/servers/서버주소")
winHttp.Send("")               ; 전송 메소드
winHttp.WaitForResponse( )     ; 값이 올때까지 대기
Data := winHttp.ResponseText   ; 받은 값을 Data변수에 대입

RegExMatch(Data,"</font> (.*)명 접속중", user) ;정규식으로 파싱
Msgbox,%user1%명
; user = </font> '접속자수'명 접속중
 ; user1 = 접속자수

 

 

 

만약 모르시거나. 다른 값이 나온다면 주저 하지 마시고 질문 남겨주시면 확인후 알려드리겠습니다.




6개의 댓글

아이스틴
2020.01.12

마*리스트보고 궁금했었는데 이런거였군요

DDang_
2020.01.14

좋은 글은 추천입니다

겸손한젤리봇
2020.01.14
@DDang_
77ㅓ억.. 앗 들렸나요 DDang_님? ㅎㅎ.. 무슨 소리냐구요? 당신의 포인트를 먹는 소리★ (-2)
DDang_
2020.01.14
@겸손한젤리봇

안들렸습니다

Violet
2020.03.21

RegExMatch(Data," (.*)명 접속중", user) ;정규식으로 파싱

Msgbox,%user1%명 ;왜 여기서 user를 사용하지 않고 user1 을 사용하는 지 궁금합니다. user를 사용하면 (.*)명 접속중 의 내용이 나오지만 user1 은 (.*0) 숫자만 나옵니다. 아무도 질문을 안해서 질문을 합니다. user1이라는 변수가 갑자기 추가되었는데 이렇게 사용을 해도 되나요? 글 올린 시간보다 훨씬 늦었지만 그래도 댓글을 달아봅니다.

PGping
2020.03.22
@Violet

Data에 파싱하기전 즉 순수한 상태의 문자열입니다.

 

RegExMatch(Data," (.*)명 접속중", user) ; 여기서 Data는 값을빼올 문자열이며 그뒤 " (.*)명 접속중" 이거는 정규식을 사용한 파싱입니다.

그 뒤에 user라는 변수가 파싱후 값을 넣을 변수명인데.

 

user 에는 " (.*)명 접속중" 이 들어가게 되고

user1 에는 (.*) 에 해당하는 값이 들어가게 됩니다.