Request > Response : 3번필요
망원동 검색 후 url 복사
URL Decoder/Encoder
meyerweb.com
url을 위 사이트로 Decode > https://apis.zigbang.com/v2/search?leaseYn=N&q=망원동&serviceType=원룸
1. 동이름으로 위도, 경도 구하기
위도, 경도 : lat, lng
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
import geohash2
geohash = geohash2.encode(lat,lng,precision=5) #프리시젼 5개 글짜로 바꾸어줌. 높을 수록 더 작은 영역을 나타냄 'wydjx'
3. geohash로 매물 아이디 가져오기
url = f'https://apis.zigbang.com/v2/items/oneroom?geohash={geohash}&depositMin=0&rentMin=0&salesTypes%5B0%5D=%EC%A0%84%EC%84%B8&salesTypes%5B1%5D=%EC%9B%94%EC%84%B8&domain=zigbang&checkAnyItemWithoutFilter=true'
response=requests.get(url)
# item에서 id 가져오기
item_ids = [data['itemId'] for data in response.json()['items']]
len(item_ids),item_ids[:5] #한번에 990개만 가져올 수 있음
4. 매물 아이디로 매물 정보 가져오기
post로 받아오는건 params이 필요하다.
url = 'https://apis.zigbang.com/v2/items/list'
params = {'domain': "zigbang", 'item_ids': item_ids[:900]} #900개만 가져올 수 있음
response = requests.post(url, params)
# ...없애기
pd.options.display.max_columns=40
data=response.json()['items']
df = pd.DataFrame(data)
df = df.loc[df['address1'].str.contains(addr)].reset_index(drop=True) #범위 이기에 망원동만 포함하도록 필터링
df = df[['item_id','sales_title','deposit', 'rent', 'size_m2','floor', 'building_floor', 'title',
'manage_cost','address1']]
df.tail(2)
# 아래 코드로 가져올 데이터 붙여넣기 가능
df.columns
- 함수로 생성
def oneroom(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']
geohash = geohash2.encode(lat, lng, precision=5)
url = f'https://apis.zigbang.com/v2/items/oneroom?geohash={geohash}&depositMin=0&rentMin=0&salesTypes[0]=전세&salesTypes[1]=월세&domain=zigbang&checkAnyItemWithoutFilter=true'
response = requests.get(url)
item_ids = [data['itemId'] for data in response.json()['items']]
url = 'https://apis.zigbang.com/v2/items/list'
params = {'domain': "zigbang", 'item_ids': item_ids[:900]}
response = requests.post(url, params)
data = response.json()['items']
df = pd.DataFrame(data)
df = df.loc[df['address1'].str.contains(addr)].reset_index(drop=True) #필터링
return df[['item_id', 'sales_title', 'deposit', 'rent', 'size_m2', 'floor', 'building_floor', 'title',
'manage_cost', 'address1']]
'KT AIVLE School > 웹크롤링' 카테고리의 다른 글
Naver Stock Report (0) | 2024.09.23 |
---|---|
정적 페이지 크롤링 (2) | 2024.09.20 |
NAVER API (0) | 2024.09.20 |
403 문제가 생겼을 시 (0) | 2024.09.20 |
Web Crawling (0) | 2024.09.19 |