'환율 파싱'에 해당되는 글 1건

728x90

네이버지식인에 올라온 환율 파싱 질문을 보고 한번 시도를 해봤다.

파싱하는 것은 WaitForResponse 하는 부분까지를 알아내는 것과 그 뒤의 처리로 분류할 수가 있다.

난 아직 앞부분 처리하는 건 잘 모른다.

뒷부분 처리는 Instr함수, Split 함수, Replace 함수 그리고 debug.print 기능만 이용하면 원하는 걸 얼마든지 추출해 낼 수가 있다.


내가 뽑아내고 싶은 값이 무엇인지에 따라 해당되는 걸 다시 줄여서 Split 함수를 이용하여 원하는 구간을 줄여나간다.

가령 1,097.20 이란 값만 뽑아내고 싶다면 ....

직접실행창(Ctrl + G) 에 뿌려진 결과를 보고 일정한 규칙을 찾아내면 된다.

<td> 라는 걸 Split 한다고 하면 내가 원하는 <td>는 몇번째에 있는지 한번 보자.

4번째에 있다. Split 함수는 Split(T,"<td>")(0) 를 하면 <td>를 기준으로 (0)은 앞의 것을 반환한다.

뒤의 것을 반환하는 것은 <td>가 여러개가 존재하므로 (4) 를 해주어야 한다.

이제 Debug.Print T를 해보면 결과는 1,097.20</td> 를 화면에 출력해준다.

원하는 결과는 1,097.20 이므로 </td>의 앞부분이다. Split 함수 기준으로 앞부분은 (0) 이라고 했으므로

한번에 처리하는 Split 함수는 T = Split(Split(T, "<td>")(4), "</td>")(0) 가 된다.


얻어야 할 결과값이 4.70 이라면 ....

<td class="tx_l"><span class="down"><span>??/span> <span class="num">4.70</span></span></td>

에서 Replace 함수를 이용하여 제거해서 결과를 얻거나 범위를 좁혀서 Split 함수를 이용하면 된다.


환율데이터가져오기.xlsm


Sub 환율파싱()
    Dim T As String
    Dim C As Variant
    Dim R As Variant
    Dim n As Long

    Dim Winhttp As Object
    Set Winhttp = CreateObject("WinHttp.WinHttpRequest.5.1")

    With Winhttp
        .Open "GET", "http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=%ED%99%98%EC%9C%A8"
        .SetRequestHeader "Host", "www.NAVER.com"
        .Send
        .WaitForResponse

        T = StrConv(.ResponseBody, vbUnicode)
         .WaitForResponse
'        Debug.Print T
        T = Split(Split(T, Chr(60) + "em" + Chr(62) + "USD")(1), "last")(0)
'        Debug.Print T
        T = Split(T, "</th>")(1)
        T = Replace(T, "<strong class=""down"">", "")
        T = Replace(T, "</strong>", "")
        T = Replace(T, " class=""tx_l""", "")
        T = Replace(T, "<span class=""down""><span>??/span> <span class=""num"">", "")
        T = Replace(T, "<span class=""percent down"">", "")
        T = Replace(T, "</span>", "")
        T = Replace(T, "<td class=""", "")
        Debug.Print T
       
        With Range("B2:H2")
            .Value = Array("매매기준율", "전일대비", "등락율", "현찰살때", "현찰팔때", "송금보낼때", "송금받을때")
            .HorizontalAlignment = xlCenter
            .Interior.ColorIndex = 36
        End With
       
        R = Split(T, "<td>")
        For n = 1 To UBound(R)
            Cells(3, n + 1) = Split(R(n), "</td>")(0)
        Next n
    End With
    Columns("A:H").AutoFit
 End Sub

블로그 이미지

Link2Me

,