네이버 부동산 크롤링 방법 - 모든 사이트 활용가능

네이버 부동산 데이터 받아서 뭐 실시간 들어온거 있는지 

변동사항있는지 찾아보고 싶으신가요?

 

우선 그럴려면 뭘뽑을지부터 확인해봐야겠죠 ?

저는 이 아래 데이터를 뽑아볼게요, 

뭐 활용방법은 다양합니다. 

 

아 참 일단 크롤링을 왜하냐구요 ? 

데이터 신규로 들어온거 언제 눈으로 보고있어요..

그냥 원하는 데이터 있으면 내가 프로그램 하나 돌리면 다 뽑아주는데,,

그거 활용해서 경쟁사 분석, 내 순위 확인 등등 많이 활용할수있어요

찾고자하는 데이터

 

이걸 아래와 같이 뽑아봤어요

크롤링해서 뽑은 데이터

 

 

일단 아시는분들도 계시겠지만, 네이버는 크롤링이 일반적인 크롤링은 안됩니다. 

자바스크립트 사용해서 막아놨어요 

자바스크립트로 막혀있는 모습

 

동적 크롤링을 이용해야합니다.

 

뭔지 모르시겠다구요?

모르셔도됩니다.

 

우선 크롬을 키시고 뽑고자하는 데이터에 우측버튼 누르고 검색 버튼을 누르면 저런 영어들이 나와요,

그냥 컴퓨터 용어라 생각하시면 됩니다.

 

별거없어요 겁먹으면 될 것도 안됩니다.

그냥 나는 영어 고수다 생각하세요

 

그 부분 우측버튼 눌러서 'edit html' 버튼 누릅니다.

그러면 아래와 같이 개발자 도구창이 나오는데요

개발자도구창

<a href="javascript:void(0);" 
class="item_link" role="button" aria-expanded="false" data-nclk="OTA.title">
<div class="item_title"><span class="text">청솔주공9단지 901동</span>
</div><div class="price_line"><span class="type">전세</span>
<span class="price">2억 9,000</span></div><div class="info_area">
<p class="line"><strong class="type">아파트</strong>
<span class="spec">50/36m², 9/15층, 남서향</span></p><p class="line">
<span class="spec">15 미금역세권 8월중순 약수리 깨끗 탄천인접</span></p></div></a>


이 부분에서 내가 뽑아야 할 녀석들을 어디안에 있는지 유심히 봅니다.

 

'청솔 주공9단지 901동'을 뽑아야합니다 저는 

이게 지금 보니까 div class = "item.title" 이랑 span class = "text" 안에있죠?

item_title_tag = item_soup.select_one('div.item_title span.text')

그러면 이렇게 뽑으면됩니다. 

 

그걸 프린트 해주면 출력이 될거구요, 

 

참고하실 수 있는 코드 전달드려요

from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

url = "https://new.land.naver.com/rooms?ms=37.3595704,127.105399,16&a=APT:OPST:ABYG:OBYG:GM:OR:DDDGG:JWJT:SGJT:HOJT:VL&e=RETAIL&aa=SMALLSPCRENT"

try:
    with sync_playwright() as p
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()

        print(f"네이버 부동산 페이지로 이동 중: {url}")
        page.goto(url, wait_until="networkidle", timeout=60000) 
        html_content = page.content() # JavaScript가 실행된 후의 최종 HTML 가져오기
        browser.close()

        soup = BeautifulSoup(html_content, 'lxml')

        items = soup.select('div.item') # 전체 매물 목록에서 각 아이템을 선택

        if items:
            print(f"총 {len(items)}개의 매물 블록 발견.")
            for i, item_soup in enumerate(items):
                # 각 매물 블록(item_soup) 안에서 정보 추출
                item_title_tag = item_soup.select_one('div.item_title span.text')
                item_title = item_title_tag.get_text(strip=True) if item_title_tag else "N/A"

                trade_type_tag = item_soup.select_one('div.price_line span.type')
                trade_type = trade_type_tag.get_text(strip=True) if trade_type_tag else "N/A"

                price_tag = item_soup.select_one('div.price_line span.price')
                price = price_tag.get_text(strip=True) if price_tag else "N/A"

                specs_tag = item_soup.select_one('div.info_area p.line span.spec')
                specs = specs_tag.get_text(strip=True) if specs_tag else "N/A"

                realtor_name_tag = item_soup.select_one('a[data-nclk="OTA.realtor"]')
                realtor_name = realtor_name_tag.get_text(strip=True) if realtor_name_tag else "N/A"

                print(f"--- 매물 {i+1} ---")
                print(f"매물 제목: {item_title}")
                print(f"거래 유형: {trade_type}")
                print(f"가격: {price}")
                print(f"면적/층수/방향: {specs}")
                print(f"중개사무소: {realtor_name}")
        else:
            print("매물 정보를 찾을 수 없습니다. (HTML 구조 변경 또는 동적 로딩 문제)")

except Exception as e:
    print(f"크롤링 중 오류 발생: {e}")

 

궁금한게 있으시다면 댓글 달아주셔요~ 

늘 행복하시구요