라이브러리 임포트

import requests
import pandas as pd

  • 절차
    • 동이름으로 위도 경도 구하기
    • 위도 경도로 geohash 알아내기
    • geohash로 매물 아이디 가져오기
    • 매물 아이디로 매물 정보 가져오기

1. 동이름으로 위도 경도 구하기

addr = "망원동"
url = f"https://apis.zigbang.com/v2/search?leaseYn=N&q={addr}&serviceType=원룸"
response = requests.get(url)
data = response.json()["items"][0]
lat, lng = data["lat"], data["lng"] # 위도, 경도
lat, lng

2. 위도 경도로 geohash 알아내기

%pip install geohash2
# 또는 !pip install geohash2
import geohash2

# precision이 커질수록 영역이 작아짐
geohash = geohash2.encode(lat, lng, precision=5)
geohash

3. geohash로 매물 아이디 가져오기

  • 파이썬에서는 한줄이 너무 길어질 때 \ (백슬래시)로 끊을 수가 있다

  • 주의할 점은 백슬래시 뒤에 아무 문자도 없어야 한다는 것, 공백도 안됨

url = f"https://apis.zigbang.com/v2/items?deposit_gteq=0&domain=zigbang\
&geohash={geohash}&needHasNoFiltered=true&rent_gteq=0&sales_type_in=전세|월세\
&service_type_eq=원룸"
response = requests.get(url)
datas = response.json()["items"]
# len(datas), datas[0]
ids = [data["item_id"] for data in datas]
len(ids), ids[:5]

4. 매물 아이디로 매물 정보 가져오기

# 1000개 넘어가면 나눠서 수집해야 함
url = "https://apis.zigbang.com/v2/items/list"
params = {
    "domain": "zigbang",
    "withCoalition": "true",
    "item_ids": ids
}
response = requests.post(url, params)
response
datas = response.json()["items"]
df = pd.DataFrame(datas)
df.tail(2)

  • 필요한 컬럼만 필터링
columns = ["item_id", "sales_type", "deposit", "rent", "size_m2", "floor", "building_floor",
           "address1", "manage_cost"]
filtered_column_df = df[columns]
filtered_column_df.tail(2)

  • 주소에 망원동이 있는 데이터만 필터링
result_df = filtered_column_df[filtered_column_df["address1"].str.contains("망원동")]
result_df = result_df.reset_index(drop=True)
result_df.tail(2)
profile
지식을 담습니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN