[일상] Selenium Webdriver 좋으네요.

in SteemCoinPan •  2 years ago 

네이버 주식 정보 중 시세 정보를 받아오는 웹크롤링을 만들었었는데요.

https://money-expert.tistory.com/7

원래는 1번을 기대하였으나, 설정 저장한 부분이 웹크로링할 때는 반영이 되지 않아서 2번과 같이 default 상태로 저장이 되었습니다. 일봉 데이터가 필요하기는 했지만 다른 방식으로 구하고 있었는데요.

web04.png

새로 개발 중인 로직에서 오늘 시가가 필요해서 고민하다가 1번과 같은 형태로 받는 방법을 찾아보았습니다.

다행히 selenium webdriver를 이용하면 가능하다고 하는군요.

그래서 시간이 조금 걸리긴 했지만 성공했습니다.

webdriver를 이용하여 web page 브라우저를 띄운 후 html을 파싱하여 원하는 항목에 명령을 줄 수 있더군요.

제가 필요한 사항은 default로 나오는 2번 항목으로 바꾼 후 이 설정이 반영된 일봉 정보를 얻는 것입니다.

우선 별도의 chromedriver를 설치하여야합니다. 설치 과정은 필요가 없고, exe 파일을 다운 받으면됩니다.

sites.google.com/a/chromium.org/chromedriver/downloads

다음으로는 변경할 항목을 찾는 방법입니다. chromedriver에 화면이 뜨면 개발자모드로 들어가서 변경하고자하는 항목을 찾을 수 있는 방법을 확인하여햐 합니다.
이건 경우에 따라서 다양하기 때문에 직접 해보는 수 밖에 없습니다.

https://finance.naver.com/sise/sise_market_sum.nhn?sosok=0&page=1

위 페이지 화면 내용을 보면 시가의 경우네는 여러곳에서 사용이 되고, '고가', '저가' 등은 사용되는 곳이 없습니다. 이런 경우에는 find_element_by_xpath() 함수를 사용하여 간단하게 찾을 수 있습니다.

'시가'의 경우에는 해당하는 id를 찾아야 하는데요. html 문서에서 '시가'를 찾아보면 아래와 같이 id를 찾을 수 있습니다. 이 값을 find_element_by_id에 전달하면 됩니다.

web05.png

def open_naver_stock_page(driver, url) :
    driver.get(url)

    driver.find_element_by_xpath(".//*[contains(text(), '고가')]").click()
    driver.find_element_by_id("option7").click()  # 시가
    driver.find_element_by_xpath(".//*[contains(text(), '저가')]").click()
    driver.find_element_by_xpath(".//*[contains(text(), '외국인비율')]").click()  # 삭제
    driver.find_element_by_xpath(".//*[contains(text(), '상장주식수')]").click()  # 삭제
    driver.find_element_by_xpath(".//*[contains(text(), 'ROE')]").click()  # 삭제

    driver.find_element_by_css_selector('[alt="적용하기"]').click()

한 페이지에는 50개 종목만 나오므로, 다음 page를 click하여야 추가 50개 종목에 대한 정보를 얻을 수 있습니다. 같은 방식으로 페이지를 변경할 수 있도록 해당하는 링크를 찾습니다. 찾은 id를 이용하여 click 함수를 부릅니다. page link의 경우에는 find_element_by_link_text()를 이용하면 됩니다. 10 페이지가 넘으면 '다음' 버튼을 눌러야 합니다. 비슷한 방식으로..


driver.find_element_by_link_text(str(i)).click()

driver.find_element_by_link_text('다음').click()

web06.png

이렇게 작업을 하면 본인이 원하는 설정으로 변경한 후 전 종목 데이터를 다운 받을 수 있습니다.

selenium webdriver 를 이용하여 특정 페이지를 자동으로 브라우징하는 것을 만들고 보니, 적용할 수 있는 분야가 많을 것 같습니다. 이렇게 좋은 기능을 이제야 할게 되었군요.

소스는 아래 github에 올려놓았습니다.

https://github.com/multizone-quant/system-trading/blob/master/day-bong-list-soup.py

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

@tipu curate 🐣🐣🐣

@upvu voted. voting percent : 27.69 %, delegate sp : 8009, token amount : 29000, total sp of upvu : 2044900

@tradingideas transfered 8 KRWP to @krwp.burn. voting percent : 33.99%, voting power : 79.52%, steem power : 1841986.79, STU KRW : 1200.
@tradingideas staking status : 5000 KRWP
@tradingideas limit for KRWP voting service : 10 KRWP (rate : 0.002)
What you sent : 8 KRWP [44924818 - 2ac574900219613ce4b1c67008e5f23146f4c68a]