예전부터 생각해 오던 반려동물 관련 앱 만들기
우리집 골두니처럼 대형견이 갈만한 곳을 알아볼려면 현재 나온 앱들도 대형견에 관련된 내용들은 부실하기만 할 뿐..
역시 소형견의 천국 대한민국에서 대형견 키우기는 쉽지 않다..
그러므로! API를 만들어서 앱을 만들어보겠다는 생각을 가지고 데이터 베이스 부터 쌓아보기로 하였다.
처음에 우리나라 검색은 naver가 최고니깐!
naver 지도 검색 API 를 이용해서 정보를 수집하기로 했다.
하지만 API를 사용했을 때 문제가 생겼는데
import os
import sys
import urllib.request
client_id = "API id"
client_secret = "API 키"
encText = urllib.parse.quote("반려견 놀이터")
url = "https://openapi.naver.com/v1/search/local.json?query=" + encText +"&display=10"+"&start=2"
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
결과가 나오긴 하는데 계속 같은 5개의 결과만 나오는 상황..
알아보니.. 지도 API로 데이터의 이동으로 인한 트래픽문제로 네이버에서 5개의 결과만 나오도록 API를 조정한것....!!!
3시간 동안 문제도 못보다가 이제야 발견해버렸다. 그래도 공부했으니깐!
이제 카카오 API로 데이터 가져오기
import pandas as pd
import requests
import json
region_list = ["","서울", "인천", "부천", "일산", "덕양구", "부평구"]
keyword_list = ["반려견", "반려견 호텔", "반려견 동반 식당","반려견 동반 캠핑장", "반려견 유치원", "반려견 훈련소","반려견 동반카페",
"반려견 놀이터", "반려견 동반 펜션", "반려견 동반 셀프 목욕"]
while keyword_list:
keyword = keyword_list.pop(0)
for region in region_list:
for i in range(1,46):
url = "https://dapi.kakao.com/v2/local/search/keyword.json?query="+ region + " " + keyword + "&page=" + str(i)
header = {"Authorization": "KakaoAK API키"}
result = requests.get(url, headers=header)
print(region + " " + keyword)
if result.ok:
recode = json.loads(str(result.text))
data1 = pd.json_normalize(recode['documents'])
# 에러 처리
try:
data = pd.concat([data, data1])
# 중복 결과 처리
if sum(data.duplicated()) >= len(data1):
data.drop_duplicates(inplace=True, ignore_index=True)
print("데이터 수 :",len(data))
break
else :
data.drop_duplicates(inplace=True, ignore_index=True)
print("데이터 수 :",len(data))
except :
data = data1
else:
print(result)
break
ㅠㅠ 처음 같은데이터가 쌓여서 검색에 문제가 생겼나? 했는데 알고보니
마지막 페이지 데이터가 반복되고 있는 상황.. 혹시 카카오도 막혔나? 싶어서 걱정했지만
다행이 검색어에 따라 데이터의 양이 다를 뿐 네이버처럼 한정적으로 나오지는 않아 다행이였다.
반복적인 데이터는 없애주고, pandas의 데이터 프레임을 이용하여 데이터를 쌓고, 데이터를 정리해 나갔다.
필요없는 컬럼은 삭제해 주었다.
data.drop(columns=["category_group_name", "distance","category_group_code"], inplace= True)
같은 상호명을 검색했을 때 위치들이 달랐다.
# 겹치는 이름은 위치가 다르다.
data.loc[data['place_name'].duplicated(keep=False)]
중간에 이상한 category_name
IT?
category_name들의 목록을 확인하니 내가 원하는 데이터와 다른 것들이 중간중간 보여 drop으로 제거 해 주었다.
data['category_name'].unique()
#'서비스,산업 > 인터넷,IT', '부동산 > 부동산서비스','사회,공공기관 > 단체,협회 > 시민단체', '교육,학문 > 학원 > 애견미용학원','가정,생활 > 반려동물 > 반려동물분양,판매' 확인
find_where= data['category_name'].isin(['서비스,산업 > 인터넷,IT', '부동산 > 부동산서비스','사회,공공기관 > 단체,협회 > 시민단체', '교육,학문 > 학원 > 애견미용학원','가정,생활 > 반려동물 > 반려동물분양,판매'])
data.drop(data.loc[(find_where)].index, inplace=True)
한번더 확인
data['category_name'].isna().sum()
저장 해주기
data.to_csv('dog_play.csv')
데이터를 Workbench로 넣어서 확인을 했을 때 굳굳
[API] Twilio 문자/전화 서비스 (0) | 2021.05.27 |
---|---|
API 파일 역할 (0) | 2021.04.15 |
API 서버 배포 (serverlessframework) (0) | 2021.04.14 |
JWT 인증 토큰 로그인/로그아웃 (1) | 2021.04.08 |
JWT 인증토큰 활용 (1) | 2021.04.08 |