본문 바로가기

자동화/Selenium

네이버 주택담보대출 금리 정보 목록 자동화로 한번에 확인하기

728x90

집을 구매하기 위해 꼭 확인해야 하는 주택담보대출 금리 정보를 최근에 자주 찾아보게 되는데요.

그 중 네이버에서 제공하는 주택담보대출 금리 정보 목록을 자주 사용합니다. 

(네이버에서 검색만 하면 확인이 가능하여 편하게 확인이 가능)

 

 

네이버 주택담보대출 금리

 

자주 보다보니 불편한점이 몇가지 있었는데요.

한 페이지별로 4개 상품만 비교할 수 있고 전체 항목을 보기 위해서는 각 페이지들을 수동으로 확인해야 하기 때문에 전체 상품 데이터를 자동화로 추출하여 한눈에 정리하기 위해 구현해보았습니다.

 

2023년 2월 현재 기준으로는 13 페이지까지 보이는데 유동적으로 변경될 수 있기 때문에 전체 목록 수를 구하는 코드를 추가하였습니다.

(이후 반복문에서 사용)

 

total = driver.find_element(By.CLASS_NAME, '_total')

# 금리 목록 확인하기
for k in range(0, int(total.text)):



페이지별로 노출되는 최대 항목이 4개이므로 4번 반복하기 위한 코드를 작성하여 상품명과 금리유형 데이터를 뽑았습니다.

은행명과 상품명 / 금리유형은 각 위치가 맞게 변수를 추가하여 데이터를 뽑았습니다.

 

for i in range(0, 4):
    # 데이터 없는 경우 반복문 빠져나가기
    if nameList[listCount].text == '':
        break
    print("상품명 : " + nameList[listCount].text, productList[listCount].text)
    print("금리유형 : " + labelList[labelCount].text, labelList[labelCount+1].text)
    labelCount = labelCount + 2

 

상품별로 최저, 최고 항목만 있는 경우와 평균 항목도 같이 있는 경우 2가지가 있는걸로 확인되어

각각의 경우에 맞게 데이터를 출력할 수 있도록 구분하여 코드를 작성하였습니다.

 

콘솔에 출력하기 때문에 가독성을 위해 print(end=' ') 코드를 추가하여 줄바꿈이 되지 않도록 처리하였습니다.

 

printList = ['최저 :', '최고 :', '평균 :']

# 최저, 최고, 평균 구하기
rateList = detailList[listCount].find_elements(By.CLASS_NAME, 'rate_text')
# 평균이 있는 경우 3, 평균이 없는 경우 2
for j in rateList:
    print(printList[printCount], j.text, end=' ')
    printCount = printCount + 1

 

전체 코드입니다. 코드 실행시 전체 페이지에 있는 금리 상품 정보를 콘솔에서 한눈에 확인할 수 있습니다.

자동화 공부도 하면서 유용한 정보를 확인할 수 있는 좋은 시간이었습니다.

 

요즘 금리 인상으로 인해 금리에 대해 관심이 많은데요. 자주 금리 상품들을 확인하면서 원하는 집 구매를 위해 화이팅하시길 바랍니다.

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=bjNG&qvt=0&query=%EC%A3%BC%ED%83%9D%EB%8B%B4%EB%B3%B4%EB%8C%80%EC%B6%9C%20%EA%B8%88%EB%A6%AC')

total = driver.find_element(By.CLASS_NAME, '_total')

listCount = 0
labelCount = 0
printCount = 0
printList = ['최저 :', '최고 :', '평균 :']

# 금리 목록 확인하기
for k in range(0, int(total.text)):
    nameList = driver.find_elements(By.CLASS_NAME, 'bank_name')
    productList = driver.find_elements(By.CLASS_NAME, 'product_name')
    labelList = driver.find_elements(By.CLASS_NAME, 'label_icon')
    detailList = driver.find_elements(By.CLASS_NAME, 'rate_detail')

    # 최대 4개까지 이므로 4번 반복
    for i in range(0, 4):
        # 데이터 없는 경우 반복문 빠져나가기
        if nameList[listCount].text == '':
            break
        print("상품명 : " + nameList[listCount].text, productList[listCount].text)
        print("금리유형 : " + labelList[labelCount].text, labelList[labelCount+1].text)
        labelCount = labelCount + 2
        # 최저, 최고, 평균 구하기
        rateList = detailList[listCount].find_elements(By.CLASS_NAME, 'rate_text')
        # 평균이 있는 경우 3, 평균이 없는 경우 2
        for j in rateList:
            print(printList[printCount], j.text, end=' ')
            printCount = printCount + 1
        printCount = 0
        print('\n')
        listCount = listCount + 1

    if k == int(total.text)-1:
        break
    else:
        driver.find_element(By.CLASS_NAME, 'spnew_bf.cmm_pg_next.on').click()
 
driver.close()

 

코드 실행 결과

728x90