본문 바로가기
생활 상식

[직장인을 위한 엑셀 Tip]VBA_웹데이터 가져오기

by 티노♪ 2018. 9. 25.
728x90
반응형
안녕하세요 티노입니다.

요즘은 데이터를 어떻게 이용하느냐에 따라 업무 능력치가 달라지는 것 같습니다.


그래서 오늘은 인터넷의 공공자료를 끌어오는것에 대해 장단점을 한번 설명해보려고 합니다.



1. 인터넷 익스플로러 .application을 이용하는 방법



VB나 VC 계열의 언어에서는 자바나 다른 언어와는 달리 추가적인 라이브러리 없이 손쉽게 Internet Explorer를 제어할 수 있다. InternetExplorer.Application 오브젝트를 생성한 다음에 웹페이지에 접근하고, 폼에 정보를 입력하거나 마우스를 클릭하는 등 이벤트도 설정할 수 있다.


 


따라서 ActiveX 환경하에서 로그인이 필요한 홈뱅킹 등의 사이트도 손쉽게 접근할 수 있다. 그리고 페이지 정보를 DOM 형식으로 제공하기 때문에 id나 tag, class 정보로 손쉽게 특정 정보에 접근할 수 있어 활용범위가 무궁무진한 장점이 있다.


 


때문에 winhttp의 대부분의 단점을 커버한다고 볼수 있으나 가장 큰 문제점은 속도이다. Internet Explorer 애플리케이션을 직접 실행시켜서 제어하기 때문에 메모리를 지나치게 많이 차지하고 ActiveX 추가기능들이 실행되는 환경이라면 더욱더 느려지는 문제점이 발생한다.


 


그리고 속도가 느려지다 보니 파싱한 페이지 정보가 짤려버리는 문제점도 종종 발생하기 때문에 에러 처리에 많은 시간을 들여야 할 수도 있다. 따라서 불가피한 경우에만 사용하는 것이 좋다고 본다.




2. Winhttp를 이용하는 방법


 


가장 기본적인 방법이면서도 필요한 모든 기능을 제공하는 아주 막강한 라이브러리이다. GET, POST 방식 모두 지원하며, 헤더와 쿠키 정보도 작성하여 같이 전송할 수 있다.


 


사실상 거의 모든 페이지를 완벽히 파싱해 올 수 있으나 우리나라의 웹 환경상 접근이 제한되어 있는 페이지는 파싱해오기 어려운 문제점이 있다.(Internet Explorer.Application을 이용하면 이 문제도 해결 가능하다. 추후 설명) 또한 결과값은 단순히 String으로 제공하기 때문에 DOM 형식에 따른 접근이 어려운 문제점도 존재한다. 따라서 String을 일일이 Split하는 노가다가 불가피하다. (HTMLDocument를 이용하면 이 문제도 해결 가능하다 추후 설명)


 


때문에 단순한 페이지를 파싱해 올때는 속도면에서나 코딩 작업의 효율 면에서 매우 유용하나, 복잡한 페이지를 파싱하는 데에는 다른 라이브러리를 같이 사용할 필요가 있다.


 


또한 비슷한 라이브러리로 xmlhttp가 있는데 불러온 페이지의 정보를 XML DOM 형식으로 제공하는 장점이 있다. 해외 포럼에서는 xmlhttp의 속도가 더 빠르다고 이야기하는 경우를 종종 봤는데, 체감상으로 잘 느껴지지 않는다. 그리고 winhttp는 WaitForResponse를 통해서 페이지를 모두 로드할 때까지 대기하게 할 수 있지만, xmlhttp는 Status를 통해서 간접적으로 확인 할 수밖에 없어 불편함이 있다.




3. Winhttp와 HtmlDocument를 이용하는 방법


 


Winhttp로 파싱한 페이지 정보를 HTMLDocment 오브젝트에 강제로 집어넣음으로서 DOM 형식으로 만드는 방법이다. 속도면에서나 정보의 접근성 면에서나 가장 우수한 방법이다. 현재는 이방법으로만 코딩을 하고 있다. 추후에 이 방법으로 페이지를 파싱하는 방법에 대해서 글을 올려 보겠다.


 


tip. 3번의 방법 즉, winhttp와 HtmlDocument를 같이 사용하는 방법이 효과적이긴 하나 로그인 등이 필요한 일부 페이지는 접근이 어려운 문제가 있다. 이러한 문제는 InternetExplorer 애플리케이션을 실행하여 로그인 한다음에 쿠키를 복사한 뒤, WinHttp로 쿠키 정보를 다시 보내면 간단히 해결 가능하다. 이 방법에 대해서도 추후 글을 올려 보겠다.



4. 엑셀 기능 "웹에서 외부 데이터 가져오기" 이용하는 방법

 가장 간편하고 코딩이 1도 필요 없는 방법입니다. 물론 코딩을 좀 안다면, 더 많은 정보를 끌어올 수도 있습니다.

 하지만 직접 해본 결과 파싱 데이터가 많아 질수록 느려 지는걸 확인 할 수 있었습니다. 예를 들어 주식 100개 항목, 1년간의 기관 및 외국인의 매수,매도량을 불러 올때 무한 로딩에 빠진것 같은 모습을 자주 보여주네요.


반응형

댓글