POST방식 웹 크롤링 하기(Zigbang)

Post방식도 기본적으로 방법은 유사하다. 콘솔에 동 이름을 넣으면 매물을 확인해보자!

import pandas as pd
import requests
  1. URL분석

    1. 직방 홈페이지에서 개발자 옵션을 열어 URL을 확인해본다.

    2. https://apis.zigbang.com/v2/search?leaseYn=N&q=’백현동’&serviceType=원룸 에서 q가 검색어 이므로 문자열 포매팅을 통해 변수로 바꾼다.

    3. post방식인지 get방식인지는 개발자옵션의 Network > Headers > Request Method에서 확인할 수 있다.

      addr = input()
      url = f'<https://apis.zigbang.com/v2/search?leaseYn=N&q={addr}&serviceType=원룸>'
      
  2. Request → Response

response = requests.post(url)
response.text

Untitled

해당 결과에서 필요한 내용은 ‘itmes’의 위, 경도 값이다. 그 이유는 직방의 개발자 옵션에서 보면

Untitled

원룸을 geohash값으로 리스트를 찾아주기 때문이다. geohash값은 위도, 경도를 기준으로 원 형태의 범위 라고 생각하면 될 것 같다. 따라서 items에서 위, 경도 값들을 불러온다.

data = response.json()['items']
lat, lng = data['lat'], data['lng']
lat, lng

Untitled

위도, 경도를 가져왔으니 이 두 값을 이용해 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]

Untitled