Search

Zigbang 원룸 매물 데이터 수집

직방 홈페이지

단계

동이름으로 위도 경도 구하기(request)
위도 경도로 geohash 알아내기
geohash로 매물 아이디 가져오기(request)
매물 아이디로 매물 정보 가져오기(request)

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

import pandas as pd import requests 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
Python
복사
(37.382808685302734, 127.12608337402344)

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

# geohash 사용하기 위해 패키지 다운로드 필요 !pip install geohash2 import geohash2
Python
복사
geohash = geohash2.encode(lat, lng, precision=5) # precision 의 값이 커질수록 영역이 좁아진다. geohash
Python
복사
'wydks'

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

url = 'https://apis.zigbang.com/v2/items/oneroom?geohash=wydks&depositMin=0&rentMin=0&salesTypes[0]=전세&salesTypes[1]=월세&&domain=zigbang&checkAnyItemWithoutFilter=true' response = requests.get(url) ids = [item['itemId'] for item response.json()['items']] # 매물 정보 len(ids), ids[:5] # 매물 개수 확인
Python
복사
(197, [42336668, 42210019, 42206782, 42331725, 42294062])
page_block = 15 dfs = [] for start in range(0, len(ids), 15): end = start + page_block url = 'https://apis.zigbang.com/v2/items/list' params = { 'domain' : 'zigbang', 'item_ids' : ids[start:end], # 한번에 가져오는 매물 개수 15개로 설정 } response = requests.pose(url, data=params) data = response.json()['items'] df = pd.DataFrame(data)[['item_id','deposit','rent','size_m2','address1']] dfs.append(df)
Python
복사
len(dfs) # 14 result = pd.concat(dfs, ignore_index=True) result.tail(2)
Python
복사
item_id
deposit
rent
size_m2
address1
195
42361607
1000
110
72.41
경기도 성남시 분당구 삼평동
196
42299025
28000
10
69.07
경기도 성남시 분당구 삼평동
‘서현동’을 검색했는데 크롤링해온 데이터에 ‘삼평동’이 포함되는 이유는 geohash 의 precision 파라미터 값을 5로 설정해 기존보다 지역 범위가 넓어졌기 때문이다.
‘서현동’ 만을 검색하고 싶다면 address1 의 값에서 필터링해주면 된다.
result[result['address1'].str.contains('서현동')].reset_index(drop=True).tail(2)
Python
복사
item_id
deposit
rent
size_m2
address1
42
42369145
24000
0
75.0900
경기도 성남시 분당구 서현동
43
42373351
21500
15
72.7273
경기도 성남시 분당구 서현동
→ ‘서현동’으로 필터링해주니 총 44개의 매물로 줄어든 것을 확인할 수 있다.