네, 주어진 코드는 네이버 부동산에서 매물 데이터를 가져와 Streamlit을 통해 시각화하는 예제입니다. 주요 기능과 각 부분의 설명을 보니 네이버 부동산 매물 데이터를 페이지별로 수집하여 Streamlit으로 정리하는 코드가 맞습니다. 하지만 이 코드를 제대로 실행하려면 몇 가지 추가 설정이나 개선이 필요할 수 있습니다. 제가 전체적으로 다시 정리해드릴게요.
이 코드의 핵심 흐름은 다음과 같습니다:
cookies와 headers 설정네이버 부동산 데이터는 보통 로그인과 인증이 필요하기 때문에 이 부분을 수정해야 데이터를 정상적으로 가져올 수 있습니다.
cookies와 headers 설정하기네이버 부동산 웹사이트를 방문할 때 브라우저 개발자 도구(F12)를 열고 Network 탭에서 요청 정보를 확인하여 cookies와 headers를 복사해야 합니다.
cookies와 headers를 코드에 넣습니다: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',
# 필요 시 추가 헤더 정보
}
⚠️ 주의: 네이버의 보안 정책에 따라 자동화된 데이터 수집은 제한될 수 있습니다. 크롤링할 때 법적 제한도 고려하세요.
주어진 코드에서는 특정 단지(complexNo: 111515)와 여러 매개변수를 사용해 아파트 매매 데이터를 가져오는 URL이 설정되어 있습니다. 하지만 필요에 따라 complexNo와 다른 매개변수를 변경해야 할 수 있습니다.
예를 들어, 특정 단지의 데이터를 가져오려면 다음과 같이 complexNo를 변경해 보세요:
complexNo=단지번호
최적화 및 데이터 정리를 조금 더 가독성 있게 개선할 수 있습니다.
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.")
이제 이 코드로 네이버 부동산 데이터를 수집하는 것은 물론, 다양한 검색 조건을 맞추어 데이터를 분석할 수 있어요! 문제 생기면 또 말해주세요 😊