728x90
상가(상권)정보 API에 대해 알아보자. 상권에 대한 다양한 정보를 제공해준다. 업종의 분류부터 반경내 상권조회 등 광범위한 데이터를 조회할 수 있다. 우선 상권업종의 대분류, 중분류, 소분류에 대해 알아보자.
상권정보 업종 대분류 조회의 응답구조는 다음과 같다. 대분류를 통해서 중분류를 조회하고 중분류를 통해서 소분류를 조회하면 모든 분류를 다 조회할 수 있다. 요청 메시지에 대한 정보는 참고문서를 확인하기 바란다.
대분류 조회를 통해 알아낸 대분류 코드를 순환하며 모든 중분류 코드를 알아낸다. 그 다음에 중분류 코드를 이용하여 모든 소분류 코드를 구하는 파이썬 코드를 작성해보자.
import pandas as pd
import requests
from bs4 import BeautifulSoup
import time
def get_commercial_category_info(api_key):
largeUpjong = pd.DataFrame()
middleUpjong = pd.DataFrame()
smallUpjong = pd.DataFrame()
url = 'http://apis.data.go.kr/B553077/api/open/sdsc/largeUpjongList?serviceKey=%s' % api_key
response = requests.get(url)
result = response.text
soup = BeautifulSoup(result, 'lxml')
largeUpjong = []
if soup.header.resultcode.text == '00':
for item in soup.find_all('item'):
largeUpjong.append({'indslclscd': item.indslclscd.text, 'indslclsnm': item.indslclsnm.text, 'stdrdt': item.stdrdt.text})
if len(largeUpjong) > 0:
largeUpjong = pd.DataFrame(largeUpjong)
# 업종 대분류 코드 리스트를 바탕으로 중분류 조회
middleUpjong = []
for indslclscd in largeUpjong['indslclscd'].tolist():
url = 'http://apis.data.go.kr/B553077/api/open/sdsc/middleUpjongList?serviceKey=%s&indsLclsCd=%s' % (api_key, indslclscd)
response = requests.get(url)
result = response.text
soup = BeautifulSoup(result, 'lxml')
if soup.header.resultcode.text == '00':
for item in soup.find_all('item'):
middleUpjong.append({'indslclscd': item.indslclscd.text, 'indslclsnm': item.indslclsnm.text,
'indsmclscd': item.indsmclscd.text, 'indsmclsnm': item.indsmclsnm.text,
'stdrdt': item.stdrdt.text})
if len(middleUpjong) > 0:
middleUpjong = pd.DataFrame(middleUpjong)
# 업종 대분류, 중분류 코드 리스트를 바탕으로 소분류 조회
smallUpjong = []
for i in range(len(middleUpjong[['indslclscd', 'indsmclscd']])):
indslclscd = middleUpjong.loc[i, 'indslclscd']
indsmclscd = middleUpjong.loc[i, 'indsmclscd']
# 소분류 연속 조회하면 오류 발생 문제를 해결하기 위해 0.5초 딜레이 부여
time.sleep(0.5)
url = 'http://apis.data.go.kr/B553077/api/open/sdsc/smallUpjongList?serviceKey=%s&indsLclsCd=%s&indsMclsCd=%s' % (api_key, indslclscd, indsmclscd)
response = requests.get(url)
result = response.text
soup = BeautifulSoup(result, 'lxml')
if soup.header.resultcode.text == '00':
for item in soup.find_all('item'):
smallUpjong.append({'indslclscd': item.indslclscd.text, 'indslclsnm': item.indslclsnm.text,
'indsmclscd': item.indsmclscd.text, 'indsmclsnm': item.indsmclsnm.text,
'indssclscd': item.indssclscd.text, 'indssclsnm': item.indssclsnm.text,
'stdrdt': item.stdrdt.text})
if len(smallUpjong) > 0:
smallUpjong = pd.DataFrame(smallUpjong)
return smallUpjong
if __name__ == '__main__':
api_key = '*'
commercial_category_info = get_commercial_category_info(api_key)
print(commercial_category_info)
결과 값
indslclscd indslclsnm indsmclscd ... indssclscd indssclsnm stdrdt
0 A 1차산업 A09 ... A09B00 갈탄광업 2015-12-17
1 A 1차산업 A09 ... A09F01 골재채취 2015-12-17
2 A 1차산업 A09 ... A09F03 공업용모래채취 2015-12-17
3 A 1차산업 A09 ... A09K08 광업권임대 2015-12-17
4 A 1차산업 A09 ... A09K02 규석광업 2015-12-17
... ... ... ... ... ... ... ...
3342 R 학문/교육 R09 ... R09A02 학원-모델 2015-12-17
3343 R 학문/교육 R09 ... R09A04 학원-실내운전 2015-12-17
3344 R 학문/교육 R09 ... R09A07 학원-심리변론 2015-12-17
3345 R 학문/교육 R09 ... R09A05 학원-역학 2015-12-17
3346 R 학문/교육 R09 ... R09A06 학원-침술 2015-12-17
다음으로 반경내 상가업소 조회 API에 대해 알아보자. 위도와 경도, 그리고 반경을 입력하면 그 반경내의 상가업소 정보를 제공해준다.
이를 조회하는 파이썬 코드를 작성해보자.
import pandas as pd
import requests
from bs4 import BeautifulSoup
def get_commercial_info_by_radius(api_key, cx, cy, radius):
pageNo = 1
commercial_info = []
col = ''
while True:
url = 'http://apis.data.go.kr/B553077/api/open/sdsc/storeListInRadius?radius=%s&cx=%s&cy=%s&serviceKey=%s&pageNo=%s' % (radius, cx, cy, api_key, pageNo)
response = requests.get(url)
result = response.text
soup = BeautifulSoup(result, 'lxml')
col = soup.columns.text.split(',')
if soup.resultcode.text == '00':
for item in soup.find_all('item'):
commercial_info.append(item.text.split('\n')[1:][:-1])
pageNo += 1
else:
break
if len(commercial_info) > 0:
commercial_info = pd.DataFrame(commercial_info, columns=col)
else:
commercial_info = pd.DataFrame()
return commercial_info
if __name__ == '__main__':
api_key = '*'
cx = '126.573301'
cy = '33.449826'
radius = '500'
commercial_info_by_radius = get_commercial_info_by_radius(api_key, cx, cy, radius)
print(commercial_info_by_radius)
결과 값
상가업소번호 상호명 ... 경도 위도
0 12049832 보듬이나눔이어린이집 ... 126.569842730846 33.4471790860129
1 12651699 닷카페 ... 126.570917983364 33.4524387197337
2 13182203 카카오2 ... 126.570917983364 33.4524387197337
3 11785666 모니카의밥집 ... 126.571748328434 33.4529621925838
4 11779884 커피니제주연평점 ... 126.571748328434 33.4529621925838
5 16169327 파리바게뜨 ... 126.571727116988 33.4529439164895
6 16380513 크린에이드 ... 126.571766357956 33.4518624645432
7 11911736 카페이안갤러리 ... 126.572609938913 33.4528909727292
8 14958220 제주국제자유도시개발센터사내근로복지기금 ... 126.572609938913 33.4528909727292
9 16160609 간단하지만특별한화피디Cafe ... 126.572609938913 33.4528909727292
10 16323460 제이디씨파트너스 ... 126.572609938913 33.4528909727292
11 21510965 씽크에이티 ... 126.572578388169 33.4535036884245
12 20266143 한라산성암영귤농원 ... 126.572578388169 33.4535036884245
13 22710380 휴럼 ... 126.572578388169 33.4535036884245
14 23377808 홀푸드코리아 ... 126.572578388169 33.4535036884245
15 13181107 제주국제자유도시개발센터 ... 126.572578388169 33.4535036884245
16 16385003 제이제이모터스 ... 126.572573957015 33.4537741133953
17 16206823 CU ... 126.575650678682 33.453079214083
18 16030465 대한후드 ... 126.576405192178 33.4503470542406
19 16275407 멕시카나 ... 126.576527899457 33.451394304774
20 28456332 제주보듬이나눔이어린이집 ... 126.569842730846 33.4471790860129
21 24491162 휘닉스벤딩서비스 ... 126.570549095293 33.4506673573279
22 26220456 삼성웰스토리제주다음 ... 126.570549095293 33.4506673573279
23 26304378 에스프레사멘테일리제주사이언스 ... 126.570549095293 33.4506673573279
24 25461579 GS25 ... 126.571748328434 33.4529621925838
25 23923821 제주가내츄럴팜 ... 126.572609938913 33.4528909727292
26 24629300 CU ... 126.572609938913 33.4528909727292
27 24308913 첨단오피스 ... 126.572609938913 33.4528909727292
28 28122878 탐라레져개발 ... 126.572609938913 33.4528909727292
29 27152659 써포트랜드 ... 126.572578388169 33.4535036884245
30 23397364 법인함박재농장 ... 126.572578388169 33.4535036884245
31 25986547 위드오 ... 126.572578388169 33.4535036884245
32 24336597 경은정보기술 ... 126.572578388169 33.4535036884245
33 28371637 대한피부과학연구소제주연구소 ... 126.572578388169 33.4535036884245
34 24804446 제주전기자동차서비스 ... 126.572578388169 33.4535036884245
35 28318651 중앙감정평가법인 ... 126.572578388169 33.4535036884245
36 25731496 CU ... 126.572578388169 33.4535036884245
728x90
'Data Science > Data Collection' 카테고리의 다른 글
[05. 공공데이터포털 API] 004. 공동주택가격정보서비스 (0) | 2020.04.16 |
---|---|
[05. 공공데이터포털 API] 003. 표준지공시지가속성조회 (0) | 2020.04.16 |
[05. 공공데이터포털 API] 001. 도로명주소조회서비스 (0) | 2020.04.16 |
[04. 금융감독원 API] 021. 지분공시 종합정보 – 임원ㆍ주요주주 소유보고 (0) | 2020.04.15 |
[04. 금융감독원 API] 020. 지분공시 종합정보 – 대량보유 상황보고 (0) | 2020.04.15 |