데브남 : 부동산 매물

moon.kick·2025년 1월 30일

네, 주어진 코드는 네이버 부동산에서 매물 데이터를 가져와 Streamlit을 통해 시각화하는 예제입니다. 주요 기능과 각 부분의 설명을 보니 네이버 부동산 매물 데이터를 페이지별로 수집하여 Streamlit으로 정리하는 코드가 맞습니다. 하지만 이 코드를 제대로 실행하려면 몇 가지 추가 설정이나 개선이 필요할 수 있습니다. 제가 전체적으로 다시 정리해드릴게요.


https://wikidocs.net/267232

따라해보는데 잘 안되서..ㅠㅠ


1. 코드 개요

이 코드의 핵심 흐름은 다음과 같습니다:

  • 네이버 부동산의 API URL을 통해 데이터를 수집
  • 10개 페이지에 걸쳐 매물 데이터를 요청하고 결과를 Pandas DataFrame으로 변환
  • Streamlit 인터페이스를 통해 데이터를 사용자에게 시각적으로 보여줌

2. 주요 문제: cookiesheaders 설정

네이버 부동산 데이터는 보통 로그인과 인증이 필요하기 때문에 이 부분을 수정해야 데이터를 정상적으로 가져올 수 있습니다.

1) cookiesheaders 설정하기

네이버 부동산 웹사이트를 방문할 때 브라우저 개발자 도구(F12)를 열고 Network 탭에서 요청 정보를 확인하여 cookiesheaders를 복사해야 합니다.

  • 방법:
    1. 네이버 부동산(https://new.land.naver.com/)에 접속합니다.
    2. 브라우저 개발자 도구(F12)Network 탭 → 페이지 새로고침(F5)을 눌러 네트워크 요청을 모니터링합니다.
    3. 특정 API 요청을 클릭하고 요청의 HeadersCookies 값을 복사합니다.
    4. cookiesheaders를 코드에 넣습니다:
cookies = {
    'your-cookie-key': 'your-cookie-value',
    # 다른 쿠키 키-값 추가
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'ko,en;q=0.9',
    'Connection': 'keep-alive',
    # 필요 시 추가 헤더 정보
}

⚠️ 주의: 네이버의 보안 정책에 따라 자동화된 데이터 수집은 제한될 수 있습니다. 크롤링할 때 법적 제한도 고려하세요.


3. URL 검토: 매물 데이터를 가져오는 방식

주어진 코드에서는 특정 단지(complexNo: 111515)와 여러 매개변수를 사용해 아파트 매매 데이터를 가져오는 URL이 설정되어 있습니다. 하지만 필요에 따라 complexNo다른 매개변수를 변경해야 할 수 있습니다.

예를 들어, 특정 단지의 데이터를 가져오려면 다음과 같이 complexNo를 변경해 보세요:

complexNo=단지번호

4. 코드 최적화 및 개선

최적화 및 데이터 정리를 조금 더 가독성 있게 개선할 수 있습니다.

개선된 코드 예제:

import streamlit as st
import requests
import pandas as pd

# Streamlit 페이지 설정
st.set_page_config(page_title="Real Estate Listings Viewer", layout="wide")
st.title("Naver Real Estate Listings (Pages 1-10)")
st.markdown("Fetching real estate listings data using the Naver Real Estate API.")

# 쿠키와 헤더 설정
cookies = {
    'your-cookie-key': 'your-cookie-value',
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
    'Accept': 'application/json, text/plain, */*',
    'Connection': 'keep-alive',
}

# 데이터 수집 함수
@st.cache_data
def fetch_all_data():
    all_articles = []
    for page in range(1, 11):
        url = f'https://new.land.naver.com/api/articles/complex/111515?realEstateType=APT%3AABYG%3AJGC%3APRE&tradeType=A1&page={page}&priceMin=0&priceMax=900000000'
        
        try:
            response = requests.get(url, cookies=cookies, headers=headers)
            if response.status_code == 200:
                data = response.json()
                articles = data.get("articleList", [])
                all_articles.extend(articles)
            else:
                st.warning(f"Page {page} fetch failed. Status code: {response.status_code}")
        except requests.exceptions.RequestException as e:
            st.error(f"Request error: {e}")
        except ValueError:
            st.error(f"Invalid JSON response from page {page}.")

    return all_articles

# 데이터 가져오기
data = fetch_all_data()

# 데이터프레임으로 변환
if data:
    df = pd.DataFrame(data)
    
    # 중요한 컬럼 선택
    selected_columns = [
        "articleNo", "articleName", "realEstateTypeName", "tradeTypeName",
        "floorInfo", "dealOrWarrantPrc", "areaName", "direction",
        "articleConfirmYmd", "articleFeatureDesc", "tagList",
        "buildingName", "sameAddrMaxPrc", "sameAddrMinPrc", "realtorName"
    ]
    df_display = df[selected_columns]

    # Streamlit으로 데이터 출력
    st.write("### Real Estate Listings")
    st.dataframe(df_display)
else:
    st.write("No data available.")

5. 실행 결과

  • 이 코드를 실행하면 Streamlit 앱이 열리며 네이버 부동산에서 가져온 매물 데이터를 페이지당 정리해 보여줍니다.
  • 데이터프레임 형태로 깔끔하게 정리된 표를 Streamlit에서 바로 볼 수 있어요.

6. 추가 팁

  • 특정 검색 조건을 커스터마이징하고 싶다면 URL에 포함된 매개변수를 수정하세요:
    • realEstateType=APT (아파트)
    • tradeType=A1 (매매)
    • areaNos, complexNos 등 조건 추가 가능

이제 이 코드로 네이버 부동산 데이터를 수집하는 것은 물론, 다양한 검색 조건을 맞추어 데이터를 분석할 수 있어요! 문제 생기면 또 말해주세요 😊

profile
@mgkick

0개의 댓글