본문 바로가기
Developer/VBA

엑셀 VBA를 이용한 웹 스크랩핑

by Doony 2020. 12. 10.

최근 엑셀을 이용해서 주식 계좌 정리 파일을 만들 일이 생겨 간단히 기록하고자 합니다.
만든 프로젝트는 단순합니다.


  • 구매한 개별 종목명과 종목코드 입력
  • 매수한 수량과 매수단가 입력
  • 버튼 클릭 시, 현재가격을 가져와 자동으로 평가금액 및 수익률 등 계산

대체로 엑셀의 기본기능을 사용하면 가볍게 구현할 수 있는 계좌 정리 방안입니다만, 주식의 현재 가격을 불러오는 것은 매크로를 이용해야 했습니다.
엑셀 매크로를 이용해서 각 개별 종목들의 현재가격을 웹에서 스크랩핑해오는 과정입니다.


엑셀 VBA 참조도구에 HTTP 관련내용 추가

다음 스크린샷과 같이 도구-참조에서 항목 추가해야합니다.


다음 코드를 입력합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub main()
    
    For row = 5 To 100
        Set Value = Sheets("Sheet1").Cells(row, 4)
        If Not IsEmpty(Value) Then
            Call crawling(Value, row)
        End If
    Next row
End Sub
 
 
 
Sub crawling(num, row)
    Set explorer = CreateObject("InternetExplorer.Application")
    Url = "https://finance.naver.com/item/main.nhn?code=" & num
    With explorer
        .Visible = False
        .Navigate2 Url
    End With
    
    While explorer.readyState <> READYSTATE_COMPLETE Or explorer.Busy = True
        DoEvents
        Application.Wait (Now + TimeValue("0:00:01"))
    Wend
    Application.Wait (Now + TimeValue("0:00:01"))
    
    Dim document As HTMLElementCollection
    Set document = explorer.document
    
    For Each element In document.getElementsByClassName("no_today")
        Sheets("Sheet1").Cells(row, 7= element.innerText
    Next element
    
End Sub
cs

  1. main함수는 말그대로 엑셀에서 버튼 클릭 시 실행되는 함수입니다. 종목코드가 입력된 row, 즉 행을 따라 value를 읽어오고, 각 value를 Crawling 함수의 인자로 넣어줍니다.

  2. crawling에서는 거의 복붙 수준의 코드입니다. 네이버 finance의 종목을 보면, 주소에 종목 코드가 들어가 있는데, main에서 넘겨온 value를 주소에 포함시켜서 호출하는 형태입니다. 호출한 뒤, 현재가격에 해당하는 클래스를 읽어들여 각 종목 별 현재가 위치에 붙여넣습니다.


아래와 같이 구성되었습니다.

댓글