본문 바로가기
VBA

[셀레니움]#3_네이버날씨 크롤링

by 일등미노왕국 2022. 12. 27.

1차

https://1stminokingdom.tistory.com/68

 

[VBA] 오늘의 날씨(네이버 오늘의 날씨)

웹 크롤링 연습을 위해 엑사남님 강의 중 [오늘의 날씨]를 가져오는 강의를 이용하여 크롤링을 작업하였다. https://www.youtube.com/watch?v=5U5zPQUAL7E 아참... 새해 복 많이 받으시길..... 우선 본인이 웹

1stminokingdom.tistory.com

2차

https://1stminokingdom.tistory.com/72

 

[VBA] 오늘의 날씨에서 날씨 아이콘까지 불러오기(Feat. 네이버)

이전글을 보면 https://1stminokingdom.tistory.com/68 [VBA] 오늘의 날씨(네이버 오늘의 날씨) 웹 크롤링 연습을 위해 엑사남님 강의 중 [오늘의 날씨]를 가져오는 강의를 이용하여 크롤링을 작업하였다. http

1stminokingdom.tistory.com

3차

1차 2차 3차 를 거쳐 드디어 본인맘에 드는 최적화를 이룬거 같다.

 

가장 어려웠던건 아무래도 날씨 아이콘을 가져오는 부분이었던거 같다. 이것 역시 해결해 준건 쭌빠님이었다.

나이스 쭌빠쓰~~~

준빠님이 올려놓은 코드를 보면 

sImgURL = Sel.FindElementBycss(sSelecor).CssValue("background-image")

이코드가 상단에 보일것이다. 이 코드는 

class name "weather_main" 의 자식태그의 wt-icon ico-wt1 의 background-image 의 Value값을 가져오는 것이다.

 

이걸 console 창에서 자바스크립트로 확인을 하면

document.defaultView.getComputedStyle(document.querySelector(".weather_main>i")).getPropertyValue('background-image');

Icon = Sel.FindElementByCss(".weather_main>i").CssValue("background-image")
Icon = Split(Split(Icon, "(""")(1), """)")(0)           '= 아이콘 주소

Set Nodes = Sel.FindElementByCss(".weather_info")       '= weather_info 태그를 Nodes로 선언

Vtemp = Split(Nodes.Text, Chr(10))                      '= 줄바꿈으로 Vtemp에 넣어라

부모태그인 Set Nodes = Sel.FindElementByCss(".weather_info") 에서 이걸은 CHR(10) -> 줄바꿈으로 잘라내서

Vtemp에 담으면 된다.

 

더보기
Option Explicit
Sub Haja_날씨()

    Dim Sel As New Selenium.WebDriver
    Dim StrUrl$, Icon$
    Dim rngX As Range: Set rngX = [a2:a4]
    Dim Nodes As Object
    Dim Pic, Vtemp
    Dim i&
    
    For Each Pic In ActiveSheet.Shapes                          '= 초기화
    
        If Pic.Name <> "Button 3" Then Pic.Delete
    
    Next Pic
    
    Application.ScreenUpdating = False
    
        StrUrl = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%82%A0%EC%94%A8"
        
        Sel.AddArgument "--headless"
        Sel.Start "Chrome"
        Sel.Get StrUrl
        
       
        Icon = Sel.FindElementByCss(".weather_main>i").CssValue("background-image")
        Icon = Split(Split(Icon, "(""")(1), """)")(0)           '= 아이콘 주소
        
        Set Nodes = Sel.FindElementByCss(".weather_info")       '= weather_info 태그를 Nodes로 선언
        
        Vtemp = Split(Nodes.Text, Chr(10))                      '= 줄바꿈으로 Vtemp에 넣어라
          
     
        [b2] = Vtemp(0) & " : " & Vtemp(1)
        [b3] = Vtemp(2) & " : " & Vtemp(3)
        [b4] = Vtemp(4) & " " & Vtemp(5)
        [a6] = Vtemp(7)
        
        ActiveSheet.Shapes.AddPicture Icon, False, True, rngX.Left, rngX.Top, rngX.Width, rngX.Height + 2
       '= 날씨 아이콘 삽입
       
    Application.ScreenUpdating = True
    
    MsgBox "Have a Nice Day!!"
End Sub

셀레니움 숙제 #1,2,3번 모두 방식이 부모태그에서 텍스트를 가져와서 chr(10)으로 잘라서 Vtemp에 담아서 셀에 뿌리는 방식을 사용하였다.

 

같은 루틴이니까 눈에 빨리 익도록 반복반복 하길 바란다.

 

셀레니움#3오늘의 날씨.xlsm
0.04MB

댓글