본문 바로가기

자동화/Selenium

지역 아파트 순위 자동화로 추출하여 엑셀에 저장하기 (With Python)

728x90

이번에 자동화 해 볼 내용은 지역 아파트 순위 목록 추출하여 엑셀에 저장하기 입니다.

부동산에 관심이 많아서 아파트를 많이 보게되는데 이부분을 자동화 공부하면 좋을 거 같아서 시도해보았습니다.

 

다음 부동산에는 지역 아파트 인기순위를 확인할 수 있는 기능이 있는데 스크롤을 하여 전체 목록을 확인할 수 있는데 이부분을 자동화 해보았습니다.

 

 

 

자동화 시나리오는 아래와 같습니다.

 

  1. 다음 부동산에서 특정 지역 목록 URL 진입 (예: 서울 구로구, 경기 부천시)
  2. 우측에 노출되는 아파트 목록 자동화로 추출
  3. 추출한 내용 엑셀에 저장

 

특정 지역 아파트 검색결과를 바로 확인할 수 있는 URL로 진입한 후 sleep 함수를 사용하여 모든 데이터가 노출될 때까지 기다립니다.

(wait 기능을 이용할 수 있지만 간헐적으로 모든 데이터를 불러오지 못하고 코드가 끝나는 경우가 있어서 sleep을 사용했습니다.)

 

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://realty.daum.net/home/apt/locals/11530/danjis?order=viewCount&title=%EA%B5%AC%EB%A1%9C%EA%B5%AC%20%EC%9D%B8%EA%B8%B0%EB%8B%A8%EC%A7%80&type=local&ad_region_v1_id=11530&school_id=11530&latitude=37.4954330864&longitude=126.887505315&zoom=6')

time.sleep(3)

 

네이버나 다음 부동산, 지도 코드를 보면 class_name이 상당히 복잡하게 되어있거나 동일한 class_name을 전체적으로 사용하여 데이터를 뽑기가 어려운 경우가 많습니다.

이번 케이스와 같은 경우에는 큰 틀에 있는 div > class_name으로 먼저 find_element로 찾은 후 그 하위에 있는 데이터를 find_elements를 통해 데이터를 추출하였습니다.

 

forms = driver.find_element(By.CLASS_NAME, 'css-1dbjc4n.r-150rngu.r-eqz5dr.r-16y2uox.r-1wbh5a2.r-11yh6sk.r-1rnoaur.r-1sncvnh')
elements = forms.find_elements(By.CLASS_NAME, 'css-1563yu1')

 

find_elements로 추출한 데이터가 아파트명 -> 지역명/세대수 -> 아파트 순위 순으로 추출되기 때문에

for문을 통해 한번에 3개 데이터를 엑셀에 저장하는 코드를 반복할 수 있게 구현하였습니다.

 

for i in range(0, len(elements), 3):
    ws.append([count, elements[i].text, elements[i+1].text, elements[i+2].text])
    count = count + 1

 

전체 코드입니다. 간단하게 구현하여 짧은 코드로 특정 지역 아파트 목록 순위를 빠르게 확인할 수 있습니다.

저의 경우에는 서울 구로구 데이터를 추출하여 엑셀에 저장하였습니다.

 

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

wb = Workbook()  # Workbook 생성

ws = wb.active  # 시트 활성화
ws.title = 'home'  # 시트 타이틀 설정

ws.append(['번호', '아파트명', '지역명 / 세대수', '순위'])  # 첫 행에 저장할 데이터 항목 추가

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://realty.daum.net/home/apt/locals/11530/danjis?order=viewCount&title=%EA%B5%AC%EB%A1%9C%EA%B5%AC%20%EC%9D%B8%EA%B8%B0%EB%8B%A8%EC%A7%80&type=local&ad_region_v1_id=11530&school_id=11530&latitude=37.4954330864&longitude=126.887505315&zoom=6')

time.sleep(3)

forms = driver.find_element(By.CLASS_NAME, 'css-1dbjc4n.r-150rngu.r-eqz5dr.r-16y2uox.r-1wbh5a2.r-11yh6sk.r-1rnoaur.r-1sncvnh')
elements = forms.find_elements(By.CLASS_NAME, 'css-1563yu1')

count = 1

for i in range(0, len(elements), 3):
    ws.append([count, elements[i].text, elements[i+1].text, elements[i+2].text])
    count = count + 1

wb.save('/Users/user/Desktop/guroHome.xlsx')

print('Excel Complete!!!')

driver.close()

 

728x90