: '동 이름'을 넣으면 그 동의 원룸 정보를 추출하고 싶다.
import requests
import pandas as pd
addr = "광주시 신안동" # '광주광역시 신안동'은 검색에 안 나온다!
url = f"https://apis.zigbang.com/v2/search?leaseYn=N&q={addr}&serviceType=원룸"
response = requests.get(url)
data = response.json()["items"][0] # dict로 바꿔주고, itmes에서 0번째 인덱스만.
lat, lng = data["lat"], data["lng"] # 위도, 경도 값 가져옴
!pip install geohash2
import geohash2
geohash = geohash2.encode(lat, lng, precision=5)
# \(역슬래시): 개행하기 위해서. 뒤에 공백문자 있으면 에러남
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)
items = response.json()["items"]
ids = [item["item_id"] for item in items]
url = "https://apis.zigbang.com/v2/items/list"
params = {
"domain": "zigbang",
"withCoalition": "true",
"item_ids": ids[:900]
}
response = requests.post(url, params)
items = response.json()["items"]
colums = ["item_id", "address1", "sales_type", "deposit", "rent", "manage_cost"]
df = pd.DataFrame(items)[colums]
df[df["address1"].str.contains(addr)].reset_index(drop = True)
%%writefile zigbang.py
import requests
import pandas as pd
import geohash2
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?deposit_gteq=0&domain=zigbang\
&geohash={geohash}&needHasNoFiltered=true&rent_gteq=0&sales_type_in=전세|월세&service_type_eq=원룸"
response = requests.get(url)
items = response.json()["items"]
ids = [item["item_id"] for item in items]
url = "https://apis.zigbang.com/v2/items/list"
params = {
"domain": "zigbang",
"withCoalition": "true",
"item_ids": ids[:900]
}
response = requests.post(url, params)
items = response.json()["items"]
colums = ["item_id", "sales_type", "deposit", "rent", "address1", "manage_cost"]
df = pd.DataFrame(items)[colums]
df = df[df["address1"].str.contains(addr)].reset_index(drop = True)
df = df.rename(columns = {"address1": "주소", "sales_type": "유형","deposit": "보증금", "rent": "월세", "manage_cost": "관리비"})
return df
: #max_rows, max_columns 설정
pd.options.display.max_columns
pd.options.display.max_columns = 50
user-agent가 파이썬으로 인식되어서.. 서버가 정상적인 사용자가 아니라고 판단하고 차단함.
원래는 user-agent는 브라우저(뭐 사파리라던가..)여야함.
이걸 구분하는 방법은 직접 해보는 수밖에 없음
아래 내리면 request headers가 있음