작성
·
383
0
kb시세를 크롤링하는 부분에서
같은평형대가 존재하면 마지막에 있는 평형대의 시세를 가져오는것 같습니다.
예를들어 해당단지에 117A 타입과 117B타입이 있습니다.
아파트의경우 A타입의 거래는 많지만 B타입은 거래가 없습니다.
그래서 A타입의 시세를 조회해야하는데 코드 특성상 같은평형이라면 마지막에 수행한 시세정보를 가져오게 되어있습니다. B타입의 시세를 가져오게 되면 현 시세와 맞지 않는 부분이있습니다.
같은평형대가 있다면 A타입의 시세를 가져오는 코드가 궁금합니다.
#kb시세
series_list = []
for _, row in final_complex_detail_df.iterrows():
complex_num = row['complexNo']
area_num = row['pyeongNo']
url = "https://new.land.naver.com/api/complexes/{}/prices?complexNo={}&tradeType=A1&year=5&priceChartChange=false&type=table&areaNo={}&provider=kbstar".format(
complex_num, complex_num, area_num
)
res = requests.get(url, headers=headers)
data_dict = res.json()
try:
series = pd.DataFrame(data_dict['marketPrices']).iloc[0]
series['complexNo'] = complex_num
series['pyeongNo'] = area_num
series_list.append(series)
except:
continue
time.sleep(0.03)
price_df = pd.concat(series_list, axis=1).T
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
문의하신 부동산 KB 시세 크롤링에서 같은 평형대의 경우 A타입의 시세를 우선적으로 가져오도록 코드를 수정하는 방법에 대해 설명드리겠습니다.
코드 상에서 데이터를 가져올 때, A타입과 B타입 같이 여러 타입이 존재할 경우 마지막에 조회한 타입의 시세 정보를 받게 됩니다. 이를 A타입의 시세를 우선적으로 받도록 수정하기 위해, pd.DataFrame(data_dict['marketPrices'])
에서 가져오는 데이터 프레임 내에서 A타입에 해당하는 데이터만 필터링하여 선택하면 됩니다.
먼저, pd.DataFrame(data_dict['marketPrices'])
로 가져온 데이터프레임에서 A타입에 해당하는 row만 선택하는 예제 코드입니다. A타입을 식별할 수 있는 컬럼이 필요한데, 여기서는 이 컬럼을 typeColumn
이라고 가정하겠습니다. 실제 코드에 맞는 컬럼명으로 변경해야 합니다.
series = pd.DataFrame(data_dict['marketPrices'])
a_type_series = series[series['typeColumn'].str.contains('A')] # A타입에 해당하는 row만 필터링
if not a_type_series.empty:
series = a_type_series.iloc[0] # A타입 데이터가 있을 경우, 그 중 첫 번째 데이터를 선택
else:
series = series.iloc[0] # A타입 데이터가 없을 경우, 기존 로직을 따름
series['complexNo'] = complex_num
series['pyeongNo'] = area_num
series_list.append(series)
이 코드는 typeColumn
에서 A타입을 식별하여 해당하는 데이터만 필터링한 뒤 이 중 첫 번째 데이터를 우선적으로 선택합니다. A타입 데이터가 없을 경우에는 기존 로직대로 첫 번째 시세 정보를 사용합니다.
이 예제에서는 A타입을 구분하는 방법을 예시로 들었습니다. 실제 데이터 상황에 맞게 typeColumn
이라는 컬럼명과 'A'
타입을 식별하는 조건을 적절히 수정해 사용하시기 바랍니다.