Post방식도 기본적으로 방법은 유사하다. 콘솔에 동 이름을 넣으면 매물을 확인해보자!
import pandas as pd
import requests
URL분석
직방 홈페이지에서 개발자 옵션을 열어 URL을 확인해본다.
https://apis.zigbang.com/v2/search?leaseYn=N&q=’백현동’&serviceType=원룸 에서 q가 검색어 이므로 문자열 포매팅을 통해 변수로 바꾼다.
post방식인지 get방식인지는 개발자옵션의 Network > Headers > Request Method에서 확인할 수 있다.
addr = input()
url = f'<https://apis.zigbang.com/v2/search?leaseYn=N&q={addr}&serviceType=원룸>'
Request → Response
response = requests.post(url)
response.text
해당 결과에서 필요한 내용은 ‘itmes’의 위, 경도 값이다. 그 이유는 직방의 개발자 옵션에서 보면
원룸을 geohash값으로 리스트를 찾아주기 때문이다. geohash값은 위도, 경도를 기준으로 원 형태의 범위 라고 생각하면 될 것 같다. 따라서 items에서 위, 경도 값들을 불러온다.
data = response.json()['items']
lat, lng = data['lat'], data['lng']
lat, lng
위도, 경도를 가져왔으니 이 두 값을 이용해 geohash값을 구해보자. geohash2라는 모듈이 존재하므로 이 모듈을 사용하면 될 것 같다.
import geohash2
geohash = geohash2.encode(lat, lng, precision=5) # precision는 범위를 설정하는 변수이다.
geohash # --> 'wydks'가 나온다.
이제 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)
response.text[:500]