직방에서 지역과 조건을 설정했을 때, 목록에 뜨는 각 매물들의 세부정보를 불러오는 코드입니다. 부동산 서비스들이 전부 매물의 세부정보(세부설명)에 대한 검색이나 손쉬운 열람을 허용하지 않아서 만들었습니다.
자세한 설명은 추후 시간이 날 때 하도록 하겠습니다.
아래는 코드 전문입니다.
불필요한 코드들이 중간에 섞여 있습니다.
전체코드
# -*- coding: utf-8 -*-
import requests
import json
import pandas as pd
from pandas.io.json import json_normalize
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import time
from datetime import datetime
# 원하는 지역에서 부동산 추출 자동화
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.220 Whale/1.3.51.7 Safari/537.36",
"Referer": "https://m.land.naver.com/",
}
url = "https://apis.zigbang.com/v2/items?domain=zigbang&zoom=14&sales_type_in=%EC%A0%84%EC%84%B8&deposit_lteq=10000&rent_lteq=5&new_villa=true&geohash=wyd"
resp = requests.get(url, headers=header)
data = json.loads(resp.text)
json_data = json_normalize(data)
clusters = json_data.loc[0, "clusters"]
list_all = pd.DataFrame(json_data.loc[0, "items"])
df_want = pd.DataFrame()
for item in list_all["item_id"].values.tolist():
item_id = str(item)
url_item = (
"https://apis.zigbang.com/v1/items/"
+ item_id
+ "/read?domain=zigbang&uuid=b68e3880-c6cd-11e9-ba12-9ba7629b771c"
)
req = Request(url_item, headers=header)
res = urlopen(req)
html = res.read()
bs = BeautifulSoup(html, "html.parser")
df_want = df_want.append(pd.DataFrame(data={"item_id": [item], "매물소개": [bs]}))
df = pd.merge(df_want, list_all, on="item_id", how="left")
# 원하는 조건만 남기기
df["매물소개"] = df["매물소개"].astype("str")
df_want = df[df["매물소개"].str.contains("100|중기청|중소기업|인천", na=False)]
df_want["매물주소"] = (
df_want["item_id"]
.astype("int")
.astype("str")
.apply(lambda d: "https://zigbang.com/home/villa/items/" + d)
)
# 저장하기
now = datetime.now()
now_str = "{}{}{}".format(now.year, now.month, now.day)
df_want.to_excel(
"S:/내 드라이브/09_git/Py-Projects/0004/data/estate_zigbang(" + now_str + ").xlsx",
sheet_name="Sheet1",
header=True,
index=False,
)
Code language: PHP (php)
댓글 남기기