직방 어플의 UI는 반드시 어떤 지역명을 검색해야 매물을 볼 수 있는 단점이 있다.
예를 들면
"나는 전세보증금 1000만원 이하 월세 80만원 이하인 서울 서초구의 빌라를 찾고 싶다." 라고 생각할 때는 필터를 이용해 원하는 매물들을 뽑을 수 있다. 그러나 "나는 전세보증금 2000만원 이하로 복층인 오피스텔을 찾고 싶다."라고 할 때 '복층' 이라는 필터를 직방에서 따로 제공하지 않기 때문에 일일이 오피스텔을 보면서 복층이 있는지 찾아봐야 한다.
요즘 파티룸에 대해 관심이 많은데 파티룸과 관련된 매물들만 따로 보고 싶었지만 모든 매물들을 일일이 눌러서 파티룸에 적합한지 확인하는게 너무 불편했다. 그렇다고 검색창에 파티룸을 검색할 수도 없는 상황이다. 그래서 오늘은 직방 API 를 이용해 제목(title), 상세 설명란(description)에 "파티룸"이 검색되는 것들은 모조리 긁어 올 것이다.
파이썬 직방 API 이용 기본
2021.10.12 - [데이터 분석/데이터 분석] - 직방에서 상가 크롤링하기 (B급 코딩)
이전 글에서 직방 API를 이용하는 기본에 대해서 다루었다. 우선 매물번호 503960번에 대해서 데이터를 긁어와보자.
import requests
import json
req = requests.get("https://apis.zigbang.com/v2/store/article/stores/574039")
data= json.loads(req.text )
item = data['item']
agent = data['agent']
deposit = item['보증금액']
rent = item['월세금액']
premium = item['권리금액']
city1 = item['local1']
city2 = item['local2']
city3 = item['local3']
images = item['images']
phone = agent['agent_phone']
data_keys = list(data['item'].keys())
data_values = list(data['item'].values())
columns_list = list(data['item'].keys())
item 항목에 긁어온 데이터의 중요한 내용들이 다 있는데 title 에 보면 "파티룸"이라는 키워드가 들어가 있다. 그리고 상세설명인 description 에도 파티룸을 소개하는 글들을 많이 볼 수 있다.
파티룸 키워드가 있는 매물 추출
우선 특정 문장에 특정 키워드가 있는지를 볼 때는 find 매서드를 활용한다. find 메서는 문자열의 위치를 반환한다. 예를 들어 "★강북구에 있는 파티룸임대 매물입니다★"라는 문장에서 0부터 시작하여 세어보면 "파티룸"이라는 키워드는 9번째 글자부터 시작한다. 또한 반환하는 값이 없으면 -1을 반환한다. 그래서 어떤 문장에 특정 단어가 포함되어 있는 경우는 0보다 크거나 같고, 포함되어 있지 않는 경우는 무조건 -1로 환한다.
매물번호 400,000번부터 600,000번 까지 for 문으로 무식하게 계속 돈다. item['title'] 또는 item['description'] 에서 '파티룸'이라는 단어가 나오면 시리즈를 생성한 다음 데이터프레임에 계속 쌓아준다. 서울특별시에 있는 매물이 아니거나 없는 매물번호인 경우는 예외처리한다. "파티룸" 키워드가 포함된 경우 "파티룸 발견" 이라는 문구를 출력하고, 예외처리되는 경우도 "예외 처리"라는 문구를 출력한다. 그리고 파일경로를 지정해서 엑셀파일로 보내면 끝이다.
import pandas as pd
df = pd.DataFrame()
for i in range(400000, 600000):
print(i)
try:
url = "https://apis.zigbang.com/v2/store/article/stores/" + str(i)
# print(url)
req = requests.get(url)
data= json.loads(req.text)
item= data['item']
# print(item['local1'])
if item['local1'] == '서울특별시':
if item['title'].find('파티룸') > 0 or item['description'].find('파티룸') >0:
print('파티룸 발견')
s = pd.Series(item.values())
df = df.append(s, ignore_index=True)
else:
print("예외처리")
pass
# 나머지 오류 케이스들은 pass 로 처리
except:
pass
df.columns = list(data_keys)
df.to_excel('파일경로')
데이터프레임을 엑셀로 보내서 확인하기
아무래도 엑셀이 다루기가 편하기 때문에 데이터프레임을 엑셀로 보내서 확인한다. 아주 데이터가 이쁘게 잘 들어갔다. 여기서 내가 원하는 지역이나 권리금, 보증금, 월세 조건을 필터링해서 사진확인하고 관련 부동산 전화번호를 확인하면 된다. 층수나 평수도 자세히 잘 기재되어 있다.
이렇게 크롤링을 배우면 원하는 사이트에서 내가 원하는 조건을 데이터를 추출하기가 훨씬 수월한 것 같다. 집을 구하거나 상가를 구하는 사람들에게 아주 유용할 듯하다!
'데이터 분석 > 데이터 분석' 카테고리의 다른 글
파이썬으로 코스피 코스닥 상장기업 재무정보 크롤링하기 (0) | 2022.01.23 |
---|---|
Dart_fss 모듈을 활용한 배당금 예측 (그리고 실패) (0) | 2022.01.17 |
직방에서 상가 크롤링하기 (B급 코딩) (0) | 2021.10.12 |
[데이터 분석] 2021년 6월 서울아파트 갭투자 리스트 (2) | 2021.07.25 |
[데이터 분석] 로지스틱 회귀분석 (Logistic Regression) (0) | 2021.07.19 |
댓글